当我启动后台进程,然后使用窗口的关闭按钮关闭终端时,后台进程会被终止。但是,如果我使用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 不会触发与后台作业相关的任何响应,因此它们将继续继续。