技术解析

记1个信号量带来的bug
0
2021-07-22 13:39:41
idczone
bug:c代码里调用system(cmd),返回值总是-1,但是cmd实际上是执行成功的,而且cmd的exit code应该是0或者21

debug:system调用主要有2个过程:fork和waitpid
1,cmd实际执行成功,可以肯定fork是无异常,而且cmd的返回值不可能是-1,那就可能是waitpid的问题了(manual里面说-1可能fork失败导致的,起了误导作用。。。)
2,仔细看manual,说system调用的时候,会block住SIGCHLD。猜想是不是跟SIGCHLD信号量有关,最后发现使用的框架,在一开始就把SIGCHLD给SIG_IGN了。
3,去掉对SIGCHLD的屏蔽,再测就一切正常了。

据说此bug在很久很久以前就出来害人了,框架历史比较老了,问题藏得比较深。
信号和信号量的差别可大了。

这跟信号量一点关系也没有啊。你又不是在写 multi threading 。

手抖了,睡觉前发的这条。。。

这个bug,我以前也犯过。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服