• C 里面 trap 了,结果刻录命令直接。。。了😂 : growisofs[15083]: :-( waipid failed: No child processes

  • 我这边问题发生的背景是多进程的场景,也就是这个子进程里面 recv 发生中断,应该是别的进程返回 SIGCHILD 信号,然后执行相应处理函数,唤醒了其他阻塞的进程影响的 PS:recv 调用是在 DLL 接口里面,也就是用 C 代码写的,它是 Ruby 这边调用的一个硬件操作,需要等待它返回结果以后再进行处理,没法不 wait 子进程,而 DLL 里面定义了很多接口,要改成 system 或者 backtick 成本太高(每个 DLL 接口调用时候都可能发生这个问题)。

    所以问题发生的原因咱们应该达成了一致,现在想要解决的就是怎么让 SIGCHILD 信号返回时被忽略,不唤醒别的阻塞进程,我用了 Signal.trap("CHLD","IGNORE") 来忽略 SIGCHILD 信号,但是并没有好用,所以我看了看「hijack SIGCHLD handler for internal use」这个变更的代码,感觉 Ruby 端的应该通过这个方式屏蔽掉了,但是没有起作用。是我的用法有问题么(语法?加的位置?)