V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
pengdu
V2EX  ›  Linux

记1个信号量带来的bug

  •  
  •   pengdu ·
    pengdu · 2013-04-08 23:52:24 +08:00 · 3414 次点击
    这是一个创建于 4029 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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
    xatest
        1
    xatest  
       2013-04-09 02:27:06 +08:00 via iPhone
    信号和信号量的差别可大了。
    dndx
        2
    dndx  
       2013-04-09 08:03:32 +08:00
    这跟信号量一点关系也没有啊。你又不是在写 multi threading 。
    pengdu
        3
    pengdu  
    OP
       2013-04-09 13:11:31 +08:00
    @dndx 手抖了,睡觉前发的这条。。。
    skywinger
        4
    skywinger  
       2013-04-09 14:17:52 +08:00
    这个bug,我以前也犯过。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2840 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 09:30 · PVG 17:30 · LAX 02:30 · JFK 05:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.