当一个父进程被“kill -9”杀死时,子进程也会被杀死吗?

时间:2009-09-29 10:13:55

标签: linux process signals kill

我的一位同事今天早上告诉我,当他用“杀死-9”杀死supervisord时,监督的子过程没有被杀死。

他对此非常肯定,但我多次尝试并没有发现这种情况。

因此当父进程被“kill -9”杀死时,linux会确保它的子进程也被杀死了吗?

5 个答案:

答案 0 :(得分:23)

不,当父母被杀时,子进程不一定被杀死。

但是,如果孩子打开了一个正在写入的管道并且父正在读取,则当下一次尝试写入管道时,它将获得一个SIGPIPE,默认操作是将其删除。这通常是在实践中发生的事情。

答案 1 :(得分:17)

你必须使子进程守护进程,以便在父亲被杀死(或死亡)时杀死它们,否则它们被init(1)采用。

答案 2 :(得分:8)

在UNIX上,父进程和子进程的生命周期之间没有强制关系。严格地说,进程只有在调用exit()或接收未处理的信号时才会终止,默认操作将终止。

然而,当用户在 终端上点击ctrl-C,ctrl- \等时,“控制终端”中的整个“前台进程组”可以接收SIGINT和SIGQUIT等信号。具体行为部分由登录shell实现(在tty驱动程序的帮助下)。细节可能非常复杂:查看herehere

答案 3 :(得分:-1)

如果你关闭终端pid,它是进程的父进程id,则终端关闭。当终端关闭时,它的所有进程也会被终止。但是如果你在shell中创建一个子shell,那么如果你创建任何进程并杀死该进程的ppid,那么只有那个子shell会被杀死并且他们的孩子会成为孤儿。他们的父母成为init,pid是1。

[实习生@ SIPL~] $ ps -ef | grep sleep trainee 3893 3870 0 10:55 pts / 1 00:00:00 sleep 4000 trainee 3895 3788 0 10:55 pts / 0 00:00:00 grep --color = auto sleep [trainee @ SIPL~] $ kill - 9 3870 [实习生@SIPL~] $ ps -ef | grep sleep trainee 3893 1 0 10:55 pts / 1 00:00:00 sleep 4000 trainee 3906 3788 0 10:55 pts / 0 00:00:00 grep --color = auto sleep

答案 4 :(得分:-9)

您只需要知道要杀死哪个进程或服务。在我看来,httpd是。

killall -9 httpd

它会杀死httpd。

的所有子进程