因此,我阅读了两种不同的观点并试图找出哪种观点是正确的。
1) 一些在线资料称,控制终端发送的信号仅发送给前台进程组。这意味着,如果希望进程在您注销时继续在后台运行,只需暂停作业(ctrl-Z)并在后台恢复它(bg)即可。然后您可以注销,它将继续运行,因为 SIGHUP 仅发送给前台作业。
看:http://blog.nelhage.com/2010/01/a-brief-introduction-to-termios-signaling-and-job-control/
...此外,如果终端读取任何信号生成字符,它会向前台进程组生成适当的信号......
2) 其他来源声称您需要在程序执行时使用“nohup”命令,否则,请在执行期间发出“disown”命令以将其从监听 SIGHUP 的作业表中删除。他们说,如果您在注销时不执行此操作,您的进程也会退出,即使它在后台进程组中运行。
例如:http://docstore.mik.ua/orelly/unix3/upt/ch23_11.htm
...如果我无论如何都要注销,shell 就会向我的后台作业发送 HUP 信号...
在我自己对 Ubuntu Linux 的实验中,似乎 1) 是正确的。我执行了一个命令:“sleep 20 &”,然后注销,重新登录并按下“ps aux”。果然 sleep 命令仍在运行。
那么为什么这么多人似乎相信第二种方法呢?如果你所要做的只是将作业放在后台以使其保持运行,为什么这么多人使用“nohup”和“disown”?