当两个进程等待相同的 child 时会发生什么?
What happens when two processes wait for the same child?
据我了解,wait
/waitpid
的默认行为是等待进程中的状态更改。我找不到的是使用相同 pid_t
参数的两个进程 waitpid
的预期行为。
同时执行 return 并继续执行,还是只有一个人注意到状态变化的竞争条件?
一个进程只有parent可以wait(),一个进程当然可以只有一个parent.
但是,parent 进程可能有多个线程。在多个线程等待相同 child 的情况下,POSIX 指定只有其中一个线程会看到状态更改。要允许多个线程看到状态更改,您必须使用带有 WNOWAIT 标志的 waitid()。
据我了解,wait
/waitpid
的默认行为是等待进程中的状态更改。我找不到的是使用相同 pid_t
参数的两个进程 waitpid
的预期行为。
同时执行 return 并继续执行,还是只有一个人注意到状态变化的竞争条件?
一个进程只有parent可以wait(),一个进程当然可以只有一个parent.
但是,parent 进程可能有多个线程。在多个线程等待相同 child 的情况下,POSIX 指定只有其中一个线程会看到状态更改。要允许多个线程看到状态更改,您必须使用带有 WNOWAIT 标志的 waitid()。