Qt 应用程序在分叉到后台时意外收到 HUP 信号

Posted

技术标签:

【中文标题】Qt 应用程序在分叉到后台时意外收到 HUP 信号【英文标题】:Qt app receives HUP signal unexpectedly when forked to background 【发布时间】:2015-03-02 15:44:06 【问题描述】:

我已经构建了一个 Qt 应用程序,它在收到 HUP 信号后会很好地关闭(像这样的设置how to get signals into Qt)。这在 Red Had 6 下效果很好,但是当我在 Ubuntu 14 下运行这个应用程序时,我的应用程序会立即收到 HUP 信号(在后台运行分叉后)然后关闭 - 即使我没有发送 HUP。此外,这只发生在我的应用程序分叉并在后台运行时 - 如果我在前台运行我的应用程序,它不会意外收到 hup。

是否有其他原因可能导致它在守护进程时收到 HUP 信号? (以及为什么在一个发行版下而不是另一个发行版)

【问题讨论】:

【参考方案1】:

当守护进程(分叉)时,父进程在退出时发出 HUP 信号。出于某种原因,在 Red Hat 上,这个信号直到很久以后才会触发子进程。在 Ubuntu 上,信号会很快击中孩子(或者 Ubuntu 可能会为孩子保留信号)。

解决方案是确认父进程已经终止,然后挂钩到 HUP 信号。

【讨论】:

以上是关于Qt 应用程序在分叉到后台时意外收到 HUP 信号的主要内容,如果未能解决你的问题,请参考以下文章

nohup命令详解

让进程在后台运行

🍖HUP信号,僵尸进程与孤儿进程

Linux中长时间运行程序的方法

Qt:为啥我的按钮没有收到信号?

后台执行脚本