Session 为什么后台进程组在终端关闭时死亡

Session 为什么后台进程组在终端关闭时死亡,session,terminal,nohup,sshd,Session,Terminal,Nohup,Sshd,根据本常见问题解答(以及许多其他书籍): 1.15为什么我的进程在其父进程死亡时不能启动 当所有进程都未“停止”时,SIGHUP不会发送到后台进程 但是我们都知道,如果SIGHUP没有在后台进程中被捕获,那么当您关闭终端(或者像ssh这样的连接)时,它们就会死掉 即当终端关闭时,CTRL+Z-bg不足以使进程生存。 但是为什么呢? 任何智慧都是值得赞赏的 在谷歌搜索了一下之后。 我假设导致后台进程退出的HUP信号来自shell 以下是步骤: 终端关闭,bash从内核(驱动程序)接收SIGHUP

根据本常见问题解答(以及许多其他书籍):

1.15为什么我的进程在其父进程死亡时不能启动

当所有进程都未“停止”时,SIGHUP不会发送到后台进程

但是我们都知道,如果SIGHUP没有在后台进程中被捕获,那么当您关闭终端(或者像ssh这样的连接)时,它们就会死掉

即当终端关闭时,CTRL+Z-bg不足以使进程生存。

但是为什么呢? 任何智慧都是值得赞赏的

在谷歌搜索了一下之后。 我假设导致后台进程退出的HUP信号来自shell

以下是步骤:

  • 终端关闭,bash从内核(驱动程序)接收SIGHUP

  • Bash在收到SIGHUP后默认退出。退出之前,它会重新向所有正在运行或已停止的作业发送信号

  • 所有作业,包括后台进程,如果未捕获到任何信息,都将退出


  • 有一个简单的解决办法。在运行命令之前使用nohup。

    当终端关闭时,后台进程可以正常运行。只有当他们试图写入关闭的终端并接收到sigttoo时,他们才会终止。如果你澄清你要问的是哪个shell,这会有所帮助。