waitid消耗SIGCHLD吗?

时间:2014-06-06 23:42:56

标签: c linux

waitid / waitpid是否会使用任何待处理的SIGCHLD? 例如。一个线程调用waitid,而另一个调用sigwaitinfo或从signalfd读取,我可以假设两个调用在子进程终止时返回正确的数据吗?

2 个答案:

答案 0 :(得分:1)

找到https://lkml.org/lkml/2009/1/10/181

  

该通知仅告诉我们至少有一个进程已经死亡;      SIGCHLD可能一次只能处理一次。如果更多的孩子死亡      在我们清除信号之前,什么都不会发生。   ...      因为它只告诉我们至少有一个进程已经死亡,我们有      重复调用waitpid()直到我们耗尽了等待队列。

     

~~调用waitpid()不会清除待处理的信号。~~

Мanpages没有提到“等待队列”,但它解释了一些事情。

答案 1 :(得分:0)

我不会这样做。问题是你不知道信号传递到哪个线程(第一个)。另一方面,sigwaitinfo()从待处理信号集中删除信号。所以调用waitpid()的线程可能永远不会返回。