如果我在我的 linux C 程序中生成一个进程并且总共有 2 个进程,一个父进程和一个子进程。我想要:如果这两个进程之一退出,另一个进程也退出。
如何做到这一点?有没有类似的源代码?
注意:我不想阻塞两个进程,例如,我不希望父进程被 wait() 阻塞
谢谢!
如果我在我的 linux C 程序中生成一个进程并且总共有 2 个进程,一个父进程和一个子进程。我想要:如果这两个进程之一退出,另一个进程也退出。
如何做到这一点?有没有类似的源代码?
注意:我不想阻塞两个进程,例如,我不希望父进程被 wait() 阻塞
谢谢!
在父进程中可以使用waitpid
系统调用。它将阻塞直到孩子退出。
在子进程中,您不能使用waitpid
. 一种选择是,父亲将通过SIGTERM
在退出时发送给孩子来通知孩子。但这只有在父亲不会被杀死的情况下才有效SIGKILL
。我建议定期使用kill
with param0
向父进程发送信号。如果失败,则该过程终止。
如果 sig 为 0,则不发送信号,但仍会进行错误检查;这可用于检查进程 ID 或进程组 ID 是否存在。
如果孩子退出,父母将收到一个SIGCHLD
. 如果父母要死了,它应该以某种方式通知孩子,或者至少给它发送一个SIGTERM
.
http://linux.die.net/man/2/waitpid
等待任何子进程,然后在从 waitpid 返回时退出。
如果父进程退出,那么子进程就变成了僵尸进程。
如果孩子退出,则可以通过等待系统调用通知父母。您可以通过读取父级的状态来退出父级。