Різниця між закриттям терміналу за допомогою кнопки закриття та Ctrl-D


7

Коли я запускаю фоновий процес, а потім закриваю термінал за допомогою кнопки закриття вікна, фоновий процес вбивається. Однак якщо я закриваю термінал за допомогою 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

Хтось може пояснити таку поведінку?

Дякую!


Відповіді:


10

Якщо закрити вікно за допомогою кнопки закриття, оболонка SIGHUP надсилається до фонових процесів оболонкою, яка також отримує SIGHUP, коли термінал закривається. Нормальною реакцією процесів було б вихід, тому фонові завдання будуть закриті.

З іншого боку, якщо натиснути Cntl+ D, сигнал не надсилається, а на STDIN вказується EOF (Кінець файлу), і оболонка (і термінал) закривається. EOF по суті означає, що ми дійшли до кінця STDIN, більше нічого не можна вводити. Оскільки EOF не викликає жодної реакції, пов’язаної з фоновими завданнями, вони продовжуватимуться.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.