【发布时间】:2010-12-02 06:39:05
【问题描述】:
今天早上我的一位同事告诉我,当他用“kill -9”杀死supervisord时,supervisord的子进程没有被杀死。
他对此很确定,但我试了很多次,都没有发现。
那么当一个父进程被“kill -9”杀死时,linux会确保它的子进程也被杀死吗?
【问题讨论】:
标签: linux process signals kill
今天早上我的一位同事告诉我,当他用“kill -9”杀死supervisord时,supervisord的子进程没有被杀死。
他对此很确定,但我试了很多次,都没有发现。
那么当一个父进程被“kill -9”杀死时,linux会确保它的子进程也被杀死吗?
【问题讨论】:
标签: linux process signals kill
不,当父进程被杀死时,子进程不一定会被杀死。
但是,如果子进程打开了一个正在写入的管道,而父进程正在从中读取数据,那么当它下一次尝试写入管道时,它将获得一个 SIGPIPE,默认操作是终止它。这在实践中经常发生。
【讨论】:
您必须使子进程成为守护进程,以便在父亲被杀死(或死亡)时杀死它们,否则它们会被 init(1) 采用。
【讨论】:
你只需要知道你想杀死哪个进程或服务。就我而言,httpd 是。
killall -9 httpd
它会杀死httpd的所有子进程。
【讨论】:
如果您关闭作为进程的父进程 ID 的终端 pid,则终端将关闭。当终端关闭时,它的所有进程也会被杀死。但是,如果你在 shell 中创建一个子 shell,那么如果你创建任何进程并杀死该进程的 ppid,那么只有那个子 shell 会被杀死,并且他们的孩子会成为孤儿。它们的父级变为 init 且 pid 为 1。
[实习生@SIPL ~]$ ps -ef | grep sleep 实习生 3893 3870 0 10:55 pts/1 00:00:00 sleep 4000 实习生 3895 3788 0 10:55 pts/0 00:00:00 grep --color=auto sleep [trainee@SIPL ~]$ kill - 9 3870 [实习生@SIPL ~]$ ps -ef | grep sleep 实习生 3893 1 0 10:55 pts/1 00:00:00 sleep 4000 实习生 3906 3788 0 10:55 pts/0 00:00:00 grep --color=auto sleep
【讨论】: