父进程和子进程,如果退出,如何通知其他出口?

时间:2013-07-01 16:25:54

标签: c linux multiprocessing

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

如何实现这一目标? 有没有类似的源代码?

注意:我不想阻止这两个进程,例如,我不希望wait()

阻止父进程

谢谢!

4 个答案:

答案 0 :(得分:4)

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

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

来自kill(2) man page

  

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

答案 1 :(得分:1)

如果孩子退出,则会向父母发送SIGCHLD。如果父母要死,它应该以某种方式通知孩子,或者至少发送一个SIGTERM

答案 2 :(得分:0)

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

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

答案 3 :(得分:-1)

如果父进程退出,则子进程将变为僵尸进程。

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