接收SIGCHLD但尚未产生子进程

时间:2017-02-28 20:19:14

标签: c linux multithreading signals

我在Linux 3.12上运行了一个C程序。该程序产生了几个子进程。其中一个进程产生一个运行一段然后终止的线程。当这个子进程正在运行时,它执行epoll_wait()。 epoll_wait会定期返回EINTR错误。我设置了子进程以捕获执行此中断的信号,并发现它是一个信号17,根据我读过的所有内容都是SIGCHLD。事实是,这个子进程产生的线程仍然在运行。它没有终止。我还认为线程在终止时不会生成SIGCHLD。

有关为什么我的过程可能会收到信号的任何想法17?

1 个答案:

答案 0 :(得分:0)

答案是对system()的调用。代码中的这个函数产生一个进程来执行传入的shell命令。该线程正在调用system()来运行一些shell命令。当他们完成生成的流程结束并生成SIGCHLD时。