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

标签 c fork waitpid

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

是否都返回并继续执行,或者这是一种竞争条件,只有一个人注意到状态变化?

最佳答案

只有父进程可以 wait() 进程,并且进程当然只能有一个父进程。

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

POSIX: status information

关于c - 当两个进程等待同一个子进程时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39801886/

相关文章:

c - Windows 中 IP_RECVOPTS 和 IP_RECVRETOPTS 的等效项是什么

c - 多个管道和进程

perl - 当正在运行的进程不是子进程时,如何在 perl 中等待正在运行的进程完成?

c - 如何在 C 中遍历整数的数字?

c - 链接时出现错误 "multiple definitions"的原因可能是什么?

c - 双符号在这个程序中做什么?

c - 如何在 C 中的父进程和子进程之间共享结构数组?

c - 不想立即删除已终止的子进程,需要成为僵尸进程

perl - 从 Perl 获取子进程

c - 在初始化函数以 C 结尾后保留笔画标记