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

时间:2011-04-03 10:35:29

标签: session terminal nohup sshd

根据这个常见问题(以及许多其他书籍):

  

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

     

1.15为什么我的进程在其父级死亡时不会获得SIGHUP?

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

以下是步骤:

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

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

  3. 所有工作(包括后台流程)如果不捕获SIGHUP则退出