如果我在Linux C程序中生成一个进程,总共有两个进程,一个父进程和一个子进程。我希望:如果这两个进程中的任何一个退出,另一个进程也会退出。
如何实现这一点? 是否有类似的源代码?
注意:我不想阻塞两个进程,例如,我不希望使用wait()函数阻塞父进程。
谢谢!
如何实现这一点? 是否有类似的源代码?
注意:我不想阻塞两个进程,例如,我不希望使用wait()函数阻塞父进程。
谢谢!
waitpid
系统调用。它会一直阻塞直到子进程退出。waitpid
。一种选择是,父进程将在退出时向子进程发送SIGTERM
来通知它。但是,如果使用SIGKILL
杀死父进程,这种方法就不可行了。我建议使用kill
参数为0
定期向父进程发送信号。如果此操作失败,则进程已终止。如果sig为0,则不发送任何信号,但仍然执行错误检查;可以使用此项功能检查进程ID或进程组ID的存在性。
SIGCHLD
信号。如果父进程即将终止,它应该以某种方式通知子进程,或者至少发送一个 SIGTERM
信号。SIGKILL
被终止,那么子进程就不会收到 SIGTERM
。 - hek2mglSIGKILL
。 - hek2mglkill(pid, 0);
主动检查父进程是否仍然活着。如果需要的话,这可以在单独的线程中运行。 - hek2mglhttp://linux.die.net/man/2/waitpid
等待任何子进程,然后在从waitpid返回时退出。
init
继承,因为根据定义,init
的pid为1。如果(当前)父进程没有处理子进程自己的死亡,则子进程会变成僵尸进程。 - alk