1

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

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

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

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

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

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

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

4

2 回答 2

2

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

于 2011-10-18T18:27:21.397 回答
0

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

以下是步骤:

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

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

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

于 2011-04-03T12:11:04.453 回答