Warum hören Hintergrundprozesse manchmal spontan auf?

10

Manchmal, einige Zeit nachdem ich einen Prozess mit bgin bash hinterlegt habe , wenn ich in derselben Shell die Eingabetaste drücke, um die Eingabeaufforderung erneut anzuzeigen (nur um zu überprüfen, ob ich noch in bash bin, wenn eine Ausgabe des Hintergrundprozesses angezeigt wurde), Der Hintergrundprozess scheint spontan anzuhalten.

Wenn ich es noch bgeinmal mache , tritt das gleiche Problem erneut auf.

Der einzige Weg, dies zu beheben, scheint zu sein fg.

Warum passiert das?

Robin Green
quelle
Wohin geht Ihre Ausgabe? Füllen Sie irgendwo einen Puffer?
Paul Tomblin

Antworten:

12

Dies geschieht normalerweise, wenn der Prozess versucht, aus seinem stdinStream zu lesen . Wenn sich der Prozess im Hintergrund befindet, empfängt er ein TTIN-Signal und wird somit eingefroren (dasselbe Verhalten wie ein STOP-Signal). Es gibt auch das Doppelsignal TTOU, wenn ein Hintergrundprozess versucht, auf sein Terminal zu schreiben.

Wenn Sie es in den Vordergrund stellen, wird der Vorgang fortgesetzt und es kann von Ihrem Terminal gelesen werden.

Demo:

$ 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

Eine Möglichkeit, dies zu vermeiden, ist die Verwendung nohup. Dies kann jedoch seltsame Auswirkungen haben, wenn das Programm nicht damit umgeht, dass der Eingabestream umgeleitet wird /dev/null.

Matte
quelle