fork 和 sigchld 坑

最近有个项目,一个deamon进程,一个干活进程。deamon 进程会捕获SIGCHLD信号如果干活进程down掉了,deamon会收到这个信号并且重新fork干活进程。

最近发现一个问题是 deamon进程fork了好几个干活进程。团队的人调查问题,一度怀疑是不同的linux内涵对信号处理不同。后来我发现如果干活进程调用了system函数,system会fork一个子进程,这个子进程昨晚事情就退出了,导致deamon进程收到一次SIGCHLD信号。