Чому фонові процеси іноді спонтанно припиняються?


10

Іноді, через деякий час після того, як я фоновий процес з bgbash, коли я натискаю Enter в тій же оболонці, щоб повторно відобразити підказку (просто щоб перевірити, що я все ще в баші, коли відображається деякий вихід із фонового процесу), фоновий процес, здається, зупиняється спонтанно.

Якщо я bgповторюсь, повториться та сама проблема.

Єдиний спосіб виправити це, здається, є fg.

Чому це відбувається?


Куди йде ваш вихід? Ви десь заповнюєте буфер?
Пол Томблін

Відповіді:


12

Зазвичай це відбувається, якщо процес намагається прочитати зі свого stdinпотоку. Коли процес знаходиться у фоновому режимі, він отримує сигнал TTIN і, таким чином, заморожується (така ж поведінка, як і сигнал STOP). Існує також подвійний сигнал TTOU, коли фоновий процес намагається записати на свій термінал.

Виведення його на передній план поновлює процес і дозволяє йому читати з вашого терміналу.

Демонстрація:

$ cat t.sh
#! /bin/sh
sleep 1
read dummy
$ ./t.sh &
[1] 3364
$ 
[1]+  Stopped                 ./t.sh
$ ps aux|grep t.sh
me  3364  0.0  0.0  11268  1200 pts/0    T    17:04   0:00 /bin/sh ./t.sh

Одним із способів уникнути цього є використання nohup, але це може мати дивні ефекти, якщо програма не матиме справи з перенаправленням потоку введення /dev/null.

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