【问题标题】:why background process group die when terminal closed为什么终端关闭时后台进程组死机
【发布时间】:2011-07-28 14:17:09
【问题描述】:

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

ftp://rtfm.mit.edu/pub/faqs/unix-faq/programmer/faq

1.15 为什么我的进程在其父进程死亡时没有得到 SIGHUP?

当没有一个进程“停止”时,SIGHUP 不会被发送到后台进程。

但我们都知道,如果 SIGHUP 没有在后台进程中被捕获,它们会在您关闭终端(或 ssh 之类的连接)时死掉。

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

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

【问题讨论】:

  • 当终端关闭时,后台进程仍然可以正常运行。它们只有在尝试写入关闭的终端并收到 SIGTTOU 时才会终止。
  • 如果您澄清您要询问的外壳,这将有所帮助。

标签: session terminal nohup sshd


【解决方案1】:

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

步骤如下:

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

  2. Bash 默认在收到 SIGHUP 后退出。在退出之前,它会将 SIGHUP 重新发送到所有作业、正在运行或已停止

  3. 如果没有捕获 SIGHUP,所有作业(包括后台进程)都会退出

【讨论】:

    【解决方案2】:

    有一个简单的解决方案。在运行命令之前使用 nohup。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-21
      • 2010-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-13
      • 2015-12-23
      相关资源
      最近更新 更多