Wenn Sie wirklich einen Vordergrundjob haben, wartet bash darauf, dass er abgeschlossen wird. Dies ist mehr oder weniger die Definition eines Vordergrundjobs . Wenn bash hat immer noch die Kontrolle über das Terminal, zu überprüfen , was mit passiert jobs -l
, zum Beispiel:
$ ncat -kl -p 10111 &
[1] 13404
$ ncat -kl -p 10222 &
[2] 13405
$ ncat -kl -p 10333 &
[3] 13406
$ jobs -l
[1] 13404 Running ncat -kl -p 10111 &
[2]- 13405 Running ncat -kl -p 10222 &
[3]+ 13406 Running ncat -kl -p 10333 &
Ich habe dafür drei Hintergrund- ncat
Hörprozesse gestartet . Möglicherweise wird für einen Auftragsstatus auch "Fertig" oder "Gestoppt" angezeigt.
Mit der SIGSTOP / SIGCONT-Methode von Stefan Seidel können Sie einen Vordergrundjob aus einer anderen Shell effektiv in den Hintergrund stellen (obwohl das tatsächliche Signal, das von einer Shell mit Ctrl- gesendetZ wird, SIGTSTP ist, sollte jedes Signal funktionieren).
Es gibt eine subtile Unterscheidung zwischen Prozessen und Jobs, wenn die Begriffe Vordergrund und Hintergrund verwendet werden. Es gibt nur einen Shell- Vordergrundjob , es können mehrere Vordergrundprozesse vorhanden sein (dies hängt mit den IDs der Terminalprozessgruppen zusammen und kann beobachtet werden, wenn Sie zwei oder mehr Prozesse in einer Pipeline starten).
Ein laufender Prozess oder eine laufende Pipeline unter der Kontrolle der Shell wird als "Job" bezeichnet. Wenn Sie den Befehl bg
oder verwenden, verweisen fg
Sie implizit auf den neuesten Job - in meinem Fall den mit +
dem oben genannten. Diese Jobs können auch (unter anderem) explizit als% 1% 2 oder% 3 (die Zahl in []
) bezeichnet werden.
Ein nicht qualifizierter fg
Befehl wirkt sich nur auf einen Job aus, den neuesten, sodass Sie sich möglicherweise in Ihrem Verständnis der aktuellen Situation irren. Ein Hintergrundjob kann weiterhin in das Terminal schreiben:
echo foo > /dev/tcp/127.0.0.1/10111
Es kann davon abhängen, wie das Programm mit dem Terminal umgeht, ncat
funktioniert gut zum Schreiben. Wenn Sie jedoch lesen, dass Programme die Ausführung stoppen, wird die Meldung "Gestoppt" angezeigt. Die Shell startet Prozesse und wartet darauf, dass sie beendet werden oder ein SIGTTIN-Signal empfangen (dies nohup
ist ein Weg, wie es ist disown
).
Sie können einen bestimmten gestoppten Job mit Hintergrundinformationen erstellen
$ bg %3
(In meinem Fall bekomme ich den Fehler bash: bg: job 3 already in background
)
Andernfalls, wenn ein Prozess im Vordergrund steht, ist es unwahrscheinlich, dass es Probleme mit einem schnellen Ctrl- Zund gibt, es sei denn, das Programm fängt SIGTSTP ab und macht etwas Besonderes bg
. Netzwerkprogramme haben in dieser Hinsicht nichts Besonderes, eingehende Verbindungen / Daten werden vom Kernel (bis zu einem gewissen Punkt) gepuffert. Eine Streaming-Verbindung kann jedoch eine beobachtbare Pause haben.
Weitere Informationen finden Sie im Abschnitt " JOB CONTROL " der Bash-Manpage.