当两个进程等待同一个孩子时会发生什么?

时间:2016-10-01 00:40:54

标签: c fork waitpid

根据我的阅读,wait / waitpid的默认行为是等待进程中的状态更改。我找不到的是使用相同waitpid参数的两个进程pid_t的预期行为。

两者都返回并继续执行,还是只有一个注意到状态变化的竞争条件?

1 个答案:

答案 0 :(得分:4)

只有父级可以等待()进程,而进程当然只能有一个父进程。

但是,父进程可能有多个线程。在多个线程等待同一个子节点的情况下,POSIX指定只有其中一个线程将看到状态更改。要允许多个线程查看状态更改,必须使用带有WNOWAIT标志的waitid()。

POSIX: status information