Was bewirkt STRG + Z in einer Unix / Linux-Anwendung?


85

Ich war neugierig und verwirrt, was genau das Verhalten von STRG + Z ist.

Ich weiß, wenn ein Prozess im Vordergrund läuft und wir Strg + Z drücken, geht er in den Hintergrund.

Aber was genau passiert.

Erledigt es seine Arbeit weiter oder wird es ausgesetzt und bleibt an der Stelle stehen, an der es war?

Und wenn es an diesem Punkt gestoppt wird, und was ist die Bedeutung von Hintergrundjob.


7
Strg-Z sendet keinen Prozess in den Hintergrund, sondern hält ihn an.
Wooble

Antworten:


70

Ein "Hintergrundjob" ist nur ein Job, der nicht mit dem Benutzer interagiert - er kontrolliert nicht das tty und erledigt einfach seine Sache (im Allgemeinen im Hintergrund). Ein Vordergrundjob ist das Gegenteil, er hat die Kontrolle über das Tty, um mit dem Benutzer zu interagieren.

Control-Z unterbricht den letzten Vordergrundprozess (den letzten Prozess, der mit dem tty interagiert) (es sei denn, dieser Prozess führt Schritte aus, um die Unterbrechung zu ignorieren, wie dies normalerweise bei Shells der Fall ist). Dadurch kehren Sie in der Regel zu Ihrer Shell zurück, von der aus Sie in der Regel den Befehl eingeben können bg, den gerade angehaltenen Prozess in den Hintergrund zu verschieben (ihn weiter ausführen zu lassen) oder fgihn wieder in den Vordergrund zu stellen.


1
fgUm einen Hintergrundprozess rückgängig zu machen, geben Sie zunächst an, welcher Job ausgegeben wird, jobs und geben Sie dann an, ob die Ausgabe von% 1 fb %1 und der Prozess fortgesetzt werden sollen.
Scott Stensland

fg %1nichtfb %1
ahonnecke

55

Durch Drücken von Strg + Z wird das TSTPSignal an Ihren Prozess gesendet. Dadurch wird die Ausführung angehalten (der Kernel plant keine weitere CPU-Zeit für den Prozess ein) und der Prozess wartet auf einen CONT, um die Verarbeitung fortzusetzen.

Sie können dies über kill -TSTPund emulieren / replizieren kill -CONT(da killtrotz des Namens ein nominiertes Signal an Ihren Prozess gesendet wird!)

Die Shell verfügt über die Funktionalität, den Prozess im Hintergrund darzustellen, dies ist jedoch eine Beziehung zwischen der Shell und dem Prozess. Der Prozess selbst hat nicht wirklich das Konzept von "Hintergrund" oder "Vordergrund".

Sehen Sie hier für weitere Informationen.


2
^Zsendet SIGTSTP, nicht SIGSTOP
William Pursell

@ WilliamPursell - ah! Zur Kenntnis genommen. Jetzt geändert. Thx
Brian Agnew

15

Betrachten Sie diesen Befehl, der ca. 4,5 Sekunden auf meinem Laptop:

echo 2^10000000 | bc -lq | wc -c

Wenn Sie Ctrl+ drücken Z, wird die Berechnung angehalten. Sie haben die Möglichkeit, die Berechnung im Vordergrund mit fgoder im Hintergrund mit fortzusetzen bg. Letzteres entspricht mehr oder weniger der Ausführung von:

echo 2^10000000 | bc -lq | wc -c &

9

Ein Prozess wird angehalten und gestoppt, wenn Sie Strg + Z drücken. Mit fg können Sie den angehaltenen Job in den Vordergrund verschieben, mit bg können Sie ihn im Hintergrund ausführen.

Weitere Informationen finden Sie unter http://linuxreviews.org/beginner/jobs/ .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.