为什么当我command & exit
在终端中执行时(例如vimiv & exit
)维米夫终端关闭时继续运行?我期望维米夫在当前终端中作为后台作业启动,然后接收叹气当终端关闭并退出时。例如,如果我执行vimiv &
另一个exit
命令,维米夫将关闭
答案1
我希望 vimiv 在当前终端中作为后台作业启动,然后在终端关闭并退出时收到一个叹息。
不,事实并非如此。如果它是一个信号vimiv
,则只会SIGHUP
(从内核)获得一个信号前景工作,或者如果它是一份停止了后台工作。但两者都不是:它是一个正在运行的后台作业。
或者,如果 bash(特别是 bash,而不是一般的任何 shell)本身收到了一个SIGHUP
信号,并将其重新发送给所有非否认的作业。但在您的示例中,shell 通过 正常退出exit
,而不是因为它是由SIGHUP
[1] 发出信号的。
例如,如果我执行
vimiv &
后跟另一个exit
命令,vimiv
将关闭
vimiv &
这对于该程序来说可能有些特殊——如果我输入xclock &
然后exit
在终端中的单独一行上输入,xclock
则不会终止。但是,如果我通过按钮关闭终端X
,它将终止,因为在这种情况下bash
将收到SIGHUP
信号并将其重新发送到xclock
.
[1] bashSIGHUP
正常退出时也可以发送 a,但只能使用shopt -s huponexit
,这不是默认的。