为什么“disown -h”使 chromium 浏览器在关闭其终端模拟器选项卡后仍然存在?

为什么“disown -h”使 chromium 浏览器在关闭其终端模拟器选项卡后仍然存在?

为什么当我关闭终端时,尽管 nohup ,铬浏览器还是被杀死?,我在终端模拟器选项卡中写道,我运行了

$ nohup chromium-browser &

当我关闭终端选项卡时,铬浏览器也会退出。 Mark 回答说,这是因为 chromium 浏览器覆盖了 SIGHUP 的操作,从忽略到默认(终止)。

当我用 代替 重复上述disown -h内容时nohup

$ chromium-browser & disown -h

当我关闭其终端选项卡时,为什么 chromium 浏览器不会终止? (请注意,这disown -h不会从 shell 中的作业列表中删除 chromium-browser 进程,因此我认为 chromium-browser 进程仍然会从 shell 接收 SIGHUP)

谢谢。

答案1

chromium 有点复杂,所以我们使用 sleep 来代替。

$ nohup sleep 1000 >& /dev/null &
[1] 5283

这里我们有一个忽略 HUP 的睡眠进程。通过发送HUP来演示:

$ kill -SIGHUP 5283
$ kill -SIGHUP 5283
$ kill -SIGHUP 5283

看?什么都没发生。

让我们再尝试一次否认:

$ sleep 1000 &
[1] 5293
$ disown -h

这里我们有一个不忽略 HUP 的睡眠进程。通过发送HUP来演示:

$ kill -SIGHUP 5293
$ kill -SIGHUP 5293
bash: kill: (5293) - No such process
[1]+  Hangup                  sleep 1000

呵呵,死了。

您也可以在关闭旧终端后在新终端中执行此操作。显然,在 disown -h 之后关闭终端不会发送 HUP。

那么为什么 nohup chromium 不忽略 HUP 呢? nohup 将 HUP 设置为忽略,但 chromium 可能会选择恢复该设置。因此,nohup 对于对信号处理程序有自己的想法的进程来说非常无效。

使一个选择不忽略 HUP 的进程无论如何都忽略 HUP 的一种方法是首先不发送 HUP,这样它就不会知道 HUP,并且无论它是否或如何处理 HUP 都无关紧要。

相关内容