我想了解当 shell 注销发生 SIGHUP (或类似)时,以 disown 运行的进程的行为。
该过程简单地执行以下操作:
- 睡15秒
- 打印“你好”;
- 在 /tmp 中创建一个空文件
好的,我们运行该进程,然后执行 ctrl-z、bg、否认和注销。
15 秒后,/tmp 中的空文件不存在。如果我删除第二个命令(打印),进程就会结束并且存在空文件,因此,如果进程在没有附加 shell 的情况下向标准输出发送某些内容,则会从内核接收一些信号来杀死它。
该过程必须是 Perl、PHP 或 C 语言(使用 Bash 或 Python 似乎不会发生)
我知道使用 nohup 进行后台执行会将输出发送到文件,我们不会遇到此问题,但问题是当我们执行带有某些输出的进程时了解 disown 命令的行为。 (顺便说一句,使用 -h 否认具有相同的结果)。
答案1
您的进程因SIGTTOU
.
如果您想防止这种情况发生,您需要小心不要向您不再拥有的 TTY 打印某些内容。