Ich erhalte die Meldung, There are stopped jobs.
wenn ich manchmal versuche, eine Bash-Shell zu beenden. Hier ist ein reproduzierbares Szenario in Python 2.x:
- ctrl+ cwird vom Interpreter als Ausnahme behandelt.
- ctrl+ z'stoppt' den Prozess.
- ctrl+ beendet dPython für Reals.
Hier sind einige reale Terminalausgaben:
example_user@example_server:~$ python
Python 2.7.3 (default, Sep 26 2013, 20:03:06)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
ctrl+z
[1]+ Stopped python
example_user@example_server:~$ exit
logout
There are stopped jobs.
Bash hat nicht beendet, ich muss noch exit
einmal die Bash-Shell beenden.
- F: Was ist ein abgebrochener Job oder was bedeutet das?
- F: Kann ein angehaltener Prozess fortgesetzt werden?
- F:
exit
Tötet der erste die gestoppten Jobs? - F: Gibt es eine Möglichkeit, die Shell beim ersten Mal zu verlassen? (ohne
exit
zweimal einzutreten )
Antworten:
Ein angehaltener Job ist ein Job, der vorübergehend in den Hintergrund gestellt wurde und nicht mehr ausgeführt wird, aber immer noch Ressourcen verbraucht (dh Systemspeicher). Da dieser Job nicht mit dem aktuellen Terminal verbunden ist, kann er keine Ausgabe produzieren und empfängt keine Eingaben vom Benutzer.
Sie können Jobs, die Sie ausgeführt haben, mit dem
jobs
eingebauten Befehl in bash anzeigen, wahrscheinlich auch andere Shells. Beispiel:Sie können einen angehaltenen Job mit dem integrierten
fg
(Vordergrund-) Bash-Befehl fortsetzen. Wenn Sie mehrere gestoppte Befehle haben, müssen Sie angeben, welchen Sie fortsetzen möchten, indem Sie die Jobspezifikationsnummer in der Befehlszeile mit übergebenfg
. Wenn nur ein Programm gestoppt wird, können Siefg
alleine verwenden:Zu diesem Zeitpunkt befinden Sie sich wieder im Python-Interpreter und können mit Control-D beenden.
Umgekehrt können Sie
kill
den Befehl entweder mit der Jobspezifikation oder der PID ausführen. Zum Beispiel:Um die Jobspezifikation zu verwenden, stellen Sie der Zahl den Prozentschlüssel (%) voran:
Wenn Sie einen Beendigungsbefehl mit angehaltenen Jobs absetzen, wird die von Ihnen angezeigte Warnung ausgegeben. Die Jobs werden aus Sicherheitsgründen weiter ausgeführt. Damit stellen Sie sicher, dass Sie wissen, dass Sie versuchen, Jobs zu beenden, die Sie möglicherweise vergessen haben, dass Sie angehalten haben. Wenn Sie das zweite Mal den Befehl exit verwenden, werden die Jobs beendet und die Shell wird beendet. Dies kann bei einigen Programmen zu Problemen führen, die nicht auf diese Weise beendet werden sollen.
In bash können Sie anscheinend den
logout
Befehl verwenden, der gestoppte Prozesse beendet und beendet. Dies kann zu unerwünschten Ergebnissen führen.Beachten Sie auch, dass einige Programme möglicherweise nicht beendet werden, wenn sie auf diese Weise beendet werden, und dass Ihr System möglicherweise viele verwaiste Prozesse ausführt, die Ressourcen verbrauchen, wenn Sie es sich zur Gewohnheit machen, dies zu tun.
Beachten Sie, dass Sie einen Hintergrundprozess erstellen können, der angehalten wird, wenn Benutzereingaben erforderlich sind:
Sie können diese Jobs auf dieselbe Weise fortsetzen und beenden, wie Sie Jobs ausgeführt haben, die Sie mit dem
Ctrl-z
Interrupt gestoppt haben .quelle
Angehaltener Job ist ein Prozess, der ein Stoppsignal (
SIGSTOP
/SIGTSTP
) von der Tastatur (Unterbrechungszeichen Ctrl-Z), einem Befehl (z. B.kill -STOP [PID]
) oder einem anderen Prozess (z. B. Kernel, wenn das System nicht über ausreichende Ressourcen verfügt) empfangen hat und sich im angehaltenen Zustand befindet Ein Prozess, der keine Ausführung / Verarbeitung durchführt.Aktive Shell - Aufträge können von aufgelistet werden:
jobs
.Der gestoppte Prozess setzt seine Ausführung nur dann fort, wenn ihm das
SIGCONT
Signal gesendet wird. Dies kann erreicht werden, indem der Job entweder durchfg
(oderfg ID
) in den Vordergrund verschoben wird, wodurch er zum aktuellen Job wird,bg
im Hintergrund fortgesetzt wird, oder indem einSIGCONT
Signal gesendet wird (zkill -CONT [PID]
. B. ).Zum ersten Mal bei der Eingabe
exit
/logout
oder drücken Sie Ctrl-Ddie Schale druckt eine Warnmeldung über die aktuellen aktive Aufträge , die mit dem Terminal verbunden sind, deshalb wird es nicht , dass Sie diejenigen ohne Ihre Erlaubnis töten durch die Aktion zweites Mal bestätigt. Wenn diecheckjobs
Option aktiviert ist (shopt -s checkjobs
), können die Jobs auch mit ihrem Status aufgelistet werden.Sie können Ctrl+Dzweimal drücken oder länger gedrückt halten. Dadurch wird die Shell leise beendet und die aktuellen angehaltenen / ausgeführten Shel-Jobs werden schnell abgebrochen.
Alternativ verleugne sie (
disown
) , um sie sie zu verlassen oder töten manuell:kill $(jobs -p)
.quelle