2009-09-29 612 views

回答

16

您必须使子进程守护进程才能在父亲死亡(或死亡)时将其杀死,否则它们将被init(1)采用。

+1

下面是链接如果您对如何创建僵尸进程感兴趣并尝试如何处理您的系统,请创建一个僵尸进程: http://www.unix.com/unix-dummies-questions-answers/100737-how- do-you-create-zombie-process.html – Klathzazt 2009-09-29 10:55:00

+4

守护进程,父进程,父进程,子进程和僵尸进程。 电脑讲述了这样一个有趣而异想天开的故事。 – jwarner112 2013-09-30 17:02:39

23

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

但是,如果孩子有一个打开的管道正在写入并且父母正在读取,它将在下一次尝试写入管道时收到SIGPIPE,对此,默认操作是将其杀死。这通常是在实践中发生的。

8

在UNIX上,父进程和子进程的生存期之间没有强制关系。严格地说,进程只会在调用exit()或者接收一个未处理的信号时终止,而这个信号的默认行为是终止的。

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

-9

你只需要知道你想杀死哪个进程或服务。在我的情况下,httpd是。

killall -9 httpd 

它会杀死httpd的所有子进程。

+0

完全错过了问题的要点。 – 2012-11-14 02:46:57

+0

这篇文章不回答提出的问题,并且由于其他答案的作用,您可能希望删除这篇文章。 – 2012-11-14 02:47:50

-1

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

[学员@ SIPL〜] $ ps -ef | grep睡眠实习生3893 3870 0 10:55 pts/1 00:00:00 sleep 4000实习生3895 3788 0 10:55 pts/0 00:00:00 grep --color =自动睡眠[实习生@ SIPL〜] $ kill - 9 3870 [学员@ SIPL〜] $ ps -ef | grep睡眠受训者3893 1 0 10:55 pts/1 00:00:00 sleep 4000受训者3906 3788 0 10:55 pts/0 00:00:00 grep --color =自动睡眠