waitid/waitpid是否使用任何挂起的SIGCHLD
例如,如果一个线程调用waitid,而另一个线程调用sigwaitinfo或从signalfd读取数据,我能假设当子进程终止时,这两个调用都返回正确的数据吗?
发布于 2014-06-08 12:53:17
找到https://lkml.org/lkml/2009/1/10/181:
该通知仅告诉我们至少有一个进程已经死亡; SIGCHLD 一次只能挂起一次。 如果在我们清除信号之前有更多的孩子死去,什么都不会发生。 ... 因为它只告诉我们至少有一个进程已经死亡,所以我们必须反复调用 waitpid() 直到我们耗尽等待队列。
~~调用waitpid()不会清除挂起的信号~~
М网页没有提到“等待队列”,但它解释了一些事情。
发布于 2014-06-07 20:17:43
我是不会做那种事儿的。问题是您不知道信号是在哪个线程(第一个)中传递的。另一方面,sigwaitinfo()从挂起信号集中移除该信号。因此,调用waitpid()的线程可能永远不会返回。
https://stackoverflow.com/questions/24092141
复制相似问题