如何仅杀死父进程?


10

我有以下过程。

父进程
-ChildProcess
-ChildProcess
-ChildProcess

如何仅杀死父进程?我希望孩子们的进程不被杀死。如果我尝试杀死父进程,则子进程将收到SIGHUP并被杀死。


5
它是与父进程绑定的子进程的定义吗?
布拉德·帕顿

嗯,可能是的。它被绑定到其父。
kcm1700 2013年

Answers:


8

一般来说,当一个进程成为孤立进程(即其父进程去世)时,它将被init所采用。

您描述的特殊情况可能适用于交互式程序的控制终端关闭时(来自Wikipedia):

SIGHUP信号在其控制端子关闭时发送到进程。它最初旨在通知串行线掉线的过程。在现代系统中,此信号通常意味着控制伪或虚拟终端已关闭。

为防止这种情况,子进程应阻止SIGHUP,因此在大多数情况下,您需要与父进程合作。

如果父进程是外壳程序(和bashcsh等等),并且您希望运行的命令在bash完成时不终止,则可以在任何命令前加上nohup(from info coreutils "nohup invocation"):

'nohup'在忽略挂断信号的情况下运行给定的COMMAND,因此该命令可以在注销后继续在后台运行。

在此示例中:

$ tty
/dev/ttys000
$ nohup find /dir -name file -exec rm {} \;

find当外壳终止并关闭控制终端时,不会被杀死/dev/ttys000

如果一个shell脚本应该阻止SIGHUP,使用内置的trap,作为解释这里bash


1
我已经打开程序了,没有nohup,有什么建议吗?
kcm1700 2013年

据我所知,你不能做很多事情。一旦流程运行,您将无法更改它们对信号的反应方式。
2013年

1
如何将已经运行的进程置于nohup下?stackoverflow.com/questions/625409/…–
PeterVermont
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.