记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,我以前也犯过。