记1个信号量带来的bug

2013-04-08 23:52:24 +08:00
 pengdu
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在很久很久以前就出来害人了,框架历史比较老了,问题藏得比较深。
3547 次点击
所在节点    Linux
4 条回复
xatest
2013-04-09 02:27:06 +08:00
信号和信号量的差别可大了。
dndx
2013-04-09 08:03:32 +08:00
这跟信号量一点关系也没有啊。你又不是在写 multi threading 。
pengdu
2013-04-09 13:11:31 +08:00
@dndx 手抖了,睡觉前发的这条。。。
skywinger
2013-04-09 14:17:52 +08:00
这个bug,我以前也犯过。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/65322

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX