为什么通过 exit 关闭终端后命令仍继续运行?

为什么通过 exit 关闭终端后命令仍继续运行?

为什么当我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,这不是默认的。

相关内容