使用关闭按钮和 Ctrl-D 关闭终端之间的区别

使用关闭按钮和 Ctrl-D 关闭终端之间的区别

当我启动后台进程,然后使用窗口的关闭按钮关闭终端时,后台进程会被终止。但是,如果我使用Ctrl+关闭终端D,后台进程将继续运行:

sam@Sam-Pc:~$ yes > /dev/null &
[1] 10219
// I then close the terminal a reopen a new one
sam@Sam-Pc:~$ ps aux | grep yes 
sam      10295  0.0  0.0  15948  2152 pts/8    S+   00:54   0:00 grep --color=auto yes

现在使用Ctrl+D关闭终端:

sam@Sam-Pc:~$ yes > /dev/null &
[1] 10299
sam@Sam-Pc:~$Ctrl-D
// I then reopen a new terminal
sam@Sam-Pc:~$ ps aux | grep yes 
sam      10219 99.4  0.0  11404   812 ?        R    00:52   2:01 yes
sam      10295  0.0  0.0  15948  2152 pts/8    S+   00:54   0:00 grep --color=auto yes

有人能解释这种行为吗?

谢谢!

答案1

如果使用关闭按钮关闭窗口,则 shell 会向后台进程发送 SIGHUP,当终端关闭时,shell 也会收到 SIGHUP。进程的正常响应是退出,因此后台作业将被关闭。

另一方面,如果您按Cntl+ D,则不会发送任何信号,而是在 STDIN 上指示 EOF(文件结束),并且 shell(和终端)关闭。 EOF 基本上意味着 STDIN 已经结束,没有什么可以输入的了。由于 EOF 不会触发与后台作业相关的任何响应,因此它们将继续继续。

相关内容