3

如果我在我的 linux C 程序中生成一个进程并且总共有 2 个进程,一个父进程和一个子进程。我想要:如果这两个进程之一退出,另一个进程也退出。

如何做到这一点?有没有类似的源代码?

注意:我不想阻塞两个进程,例如,我不希望父进程被 wait() 阻塞

谢谢!

4

4 回答 4

4

在父进程中可以使用waitpid系统调用。它将阻塞直到孩子退出。

在子进程中,您不能使用waitpid. 一种选择是,父亲将通过SIGTERM在退出时发送给孩子来通知孩子。但这只有在父亲不会被杀死的情况下才有效SIGKILL。我建议定期使用killwith param0向父进程发送信号。如果失败,则该过程终止。

kill(2) 手册页

如果 sig 为 0,则不发送信号,但仍会进行错误检查;这可用于检查进程 ID 或进程组 ID 是否存在。

于 2013-07-01T16:28:58.283 回答
1

如果孩子退出,父母将收到一个SIGCHLD. 如果父母要死了,它应该以某种方式通知孩子,或者至少给它发送一个SIGTERM.

于 2013-07-01T16:29:16.427 回答
0

http://linux.die.net/man/2/waitpid

等待任何子进程,然后在从 waitpid 返回时退出。

于 2013-07-01T16:28:51.723 回答
-1

如果父进程退出,那么子进程就变成了僵尸进程。

如果孩子退出,则可以通过等待系统调用通知父母。您可以通过读取父级的状态来退出父级。

于 2013-07-01T16:29:58.050 回答