waitid / waitpid是否会使用任何待处理的SIGCHLD? 例如。一个线程调用waitid,而另一个调用sigwaitinfo或从signalfd读取,我可以假设两个调用在子进程终止时返回正确的数据吗?
答案 0 :(得分:1)
找到https://lkml.org/lkml/2009/1/10/181:
该通知仅告诉我们至少有一个进程已经死亡; SIGCHLD可能一次只能处理一次。如果更多的孩子死亡 在我们清除信号之前,什么都不会发生。 ... 因为它只告诉我们至少有一个进程已经死亡,我们有 重复调用waitpid()直到我们耗尽了等待队列。
~~调用waitpid()不会清除待处理的信号。~~
Мanpages没有提到“等待队列”,但它解释了一些事情。
答案 1 :(得分:0)
我不会这样做。问题是你不知道信号传递到哪个线程(第一个)。另一方面,sigwaitinfo()
从待处理信号集中删除信号。所以调用waitpid()
的线程可能永远不会返回。