这是一个创建于 4104 天前的主题,其中的信息可能已经有所发展或是发生改变。
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在很久很久以前就出来害人了,框架历史比较老了,问题藏得比较深。
4 条回复 • 1970-01-01 08:00:00 +08:00
|
|
1
xatest 2013-04-09 02:27:06 +08:00 via iPhone
信号和信号量的差别可大了。
|
|
|
2
dndx 2013-04-09 08:03:32 +08:00
这跟信号量一点关系也没有啊。你又不是在写 multi threading 。
|
|
|
3
pengdu 2013-04-09 13:11:31 +08:00
|
|
|
4
skywinger 2013-04-09 14:17:52 +08:00
这个bug,我以前也犯过。
|