我怎样才能仅终止父进程?

我怎样才能仅终止父进程?

我有以下流程。

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

我怎样才能仅终止父进程?我不想终止子进程。如果我尝试终止父进程,子进程将收到 SIGHUP 并被终止。

答案1

一般来说,当一个进程变成孤儿进程(即它的父进程死亡)时,它会被 init 收养。

您描述的特殊情况可能适用于交互式进程,当其控制终端关闭时(从维基百科):

当控制终端关闭时,会向进程发送 SIGHUP 信号。它最初设计用于通知进程串行线路断开。在现代系统中,此信号通常表示控制伪终端或虚拟终端已关闭。

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

如果父进程是 shell(bashcsh诸如此类),并且你希望运行的命令在 bash 完成时不会终止,则可以在任何命令前加上nohup(from info coreutils "nohup invocation"):

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

在此示例中:

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

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

如果 shell 脚本需要阻止 SIGHUP,请使用内置命令trap,如下所述这里为了bash

相关内容