为什么当我注销时内核会以 disown 的方式终止我的进程?

为什么当我注销时内核会以 disown 的方式终止我的进程?

我想了解当 shell 注销发生 SIGHUP (或类似)时,以 disown 运行的进程的行为。

该过程简单地执行以下操作:

  1. 睡15秒
  2. 打印“你好”;
  3. 在 /tmp 中创建一个空文件

好的,我们运行该进程,然后执行 ctrl-z、bg、否认和注销。

15 秒后,/tmp 中的空文件不存在。如果我删除第二个命令(打印),进程就会结束并且存在空文件,因此,如果进程在没有附加 shell 的情况下向标准输出发送某些内容,则会从内核接收一些信号来杀死它。

该过程必须是 Perl、PHP 或 C 语言(使用 Bash 或 Python 似乎不会发生)

我知道使用 nohup 进行后台执行会将输出发送到文件,我们不会遇到此问题,但问题是当我们执行带有某些输出的进程时了解 disown 命令的行为。 (顺便说一句,使用 -h 否认具有相同的结果)。

答案1

您的进程因SIGTTOU.

如果您想防止这种情况发生,您需要小心不要向您不再拥有的 TTY 打印某些内容。

相关内容