一般而言,当一个进程成为孤儿(即其父进程死亡)时,它会被 init 接收。
您描述的特殊情况可能适用于其控制终端关闭时的交互过程(来自Wikipedia):
SIGHUP 信号在其控制终端关闭时发送到进程。它最初设计用于通知串行线路掉线的过程。在现代系统中,这个信号通常意味着控制伪或虚拟终端已经关闭。
为了防止这种情况,子进程应该阻塞 SIGHUP,所以在大多数情况下你需要父进程的合作。
如果父进程是一个 shell(bash,csh等等),并且你希望你运行的命令在 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.