如何仅杀死父进程?

kcm*_*700 10 linux process signal

我有以下过程。

父进程
-- 子进程
-- 子进程
-- 子进程

我怎样才能只杀死父进程?我希望子进程不被杀死。如果我尝试杀死父进程,子进程将获得 SIGHUP 并被杀死。

jau*_*ume 8

一般而言,当一个进程成为孤儿(即其父进程死亡)时,它会被 init 接收。

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

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

为了防止这种情况,子进程应该阻塞 SIGHUP,所以在大多数情况下你需要父进程的合作。

如果父进程是一个 shell(bashcsh等等),并且你希望你运行的命令在 bash 完成时不终止,你可以用nohup(from info coreutils "nohup invocation") 作为任何命令的前缀:

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

在这个例子中:

$ tty
/dev/ttys000
$ nohup find /dir -name file -exec rm {} \;
Run Code Online (Sandbox Code Playgroud)

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

如果 shell 脚本应该阻止 SIGHUP,请使用 builtin trap,如此针对bash.