今天早上我的一位同事告诉我,当他通过“kill -9”杀死supervisord时,supervisord的子进程没有被杀死。
他对此非常肯定,但我尝试了很多次,并没有发现这种情况。
那么当父进程被“kill -9”杀死时,linux会确保它的子进程也被杀死吗?
今天早上我的一位同事告诉我,当他通过“kill -9”杀死supervisord时,supervisord的子进程没有被杀死。
他对此非常肯定,但我尝试了很多次,并没有发现这种情况。
那么当父进程被“kill -9”杀死时,linux会确保它的子进程也被杀死吗?
不,当父进程被杀死时,子进程不一定会被杀死。
但是,如果子进程打开了它正在写入的管道并且父进程正在从中读取数据,那么当它下一次尝试写入管道时,它将获得一个 SIGPIPE,默认操作是终止它。这在实践中经常发生。
您必须使子进程成为守护进程,以便在父亲被杀死(或死亡)时杀死它们,否则它们会被 init(1) 采用。
如果您关闭作为进程的父进程 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
你只需要知道你想杀死哪个进程或服务。在我的情况下,httpd 是。
killall -9 httpd
它将杀死httpd的所有子进程。