Senden Sie einen Prozess im Hintergrund und im Vordergrund mit Linux
Vorsicht
Dieser Artikel wurde mehr als vor einem Jahr veröffentlicht, Es gab Entwicklungen können.
Bitte berücksichtigen Sie dies.
Vor ein paar Artikeln Wir haben darüber geredet screen
: eine Befehlszeilenanwendung, mit der Sie virtuelle Sitzungen mit virtuellen Terminalfenstern erstellen können, mit denen wir uns über die aktuelle Terminalsitzung nach Belieben verbinden oder trennen können.
Screen ist ein sehr mächtiges Programm, intuitiv nach ein paar Anwendungen, das viele Dinge tun kann (Und tatsächlich gibt es viele Abkürzungen, zu viele, um sie alle aufzuzählen), aber heute sprechen wir über die klassischen Sitzungen.
Auch in diesem Fall kann ein Befehl mehrere Minuten dauern, oder sogar Stunden. Daher ist ein System erforderlich, um das Terminal freizugeben und neue Befehle auszuführen, Lassen Sie die alten im Hintergrund laufen.
Starten Sie einen Hintergrundprozess
Angenommen, wir haben einen Prozess, der, einmal getan, belegt die Terminalsitzung und verhindert, dass wir bis zum Ende der Ausführung andere Befehle ausführen können. Beispielsweise, für den Fall, dass Ihre Datenfestplatte groß und voller Daten ist updatedb
Es kann sehr lange dauern, bis der Dateiindex abgeschlossen ist.
~# updatedb
Wir haben zwei Lösungen.
Benutzen Sie die “und – Werbung” (&)
Die erste Methode besteht darin, einfach a hinzuzufügen & am Ende des Befehls. Der Vorgang läuft automatisch in den Hintergrund, Die Schale wird freigegeben und kann sofort verwendet werden.
~# updatedb &
[1] 342824
~#
In diesem Szenario, sowie die sofortige Bereitstellung des Terminals, Der Befehl gibt die Prozessidentifikationsnummer zurück (PID) mit dem wir den Ausführungsstatus über den Befehl überwachen können ps
.
~# ps ax | grep updatedb
342824 pts/2 S 0:00 /bin/sh /usr/bin/updatedb
~#
Verwenden Sie die Tastenkombination Strg+Z und den Befehl bg
Diese Methode ist noch interessanter als die erste, Denn selbst wenn wir den Befehl nicht erwarten, kann es sein, dass das Terminal für längere Zeit einfriert, Wir können den Prozess anhalten und in den Hintergrund schicken, um die Ausführung fortzusetzen.
~# updatedb
^Z # Here i clicked Ctrl+Z
[2]+ Fermato updatedb
~# bg
[2]+ updatedb &
~#
Oben habe ich den Befehl erneut ausgeführt updatedb
, Ich habe es mit der Verknüpfung angehalten Ctrl+Z
, Ich habe den Befehl ausgeführt bg
um den angehaltenen Befehl in den Hintergrund zu stellen.
Eine Liste von Hintergrundprozessen
Sie, Aber ich möchte nicht die Kontrolle verlieren. Wie viele und welche Prozesse habe ich in den Hintergrund geschickt?
:~# jobs
[1]- In esecuzione sleep 500 &
[2]+ In esecuzione updatedb &
~#
Um einen Prozess fortzusetzen, verwenden wir den Befehl fg
zusammen mit der Nummer des Prozesses, den wir wiederherstellen möchten.
~# jobs
[1]- In esecuzione sleep 500 &
[2]+ In esecuzione updatedb &
~# fg %2
updatedb
Natürlich können wir den gerade wiederhergestellten Befehl auch wieder in den Hintergrund stellen Ctrl+Z
und bg
uns in einer ewigen Schleife schließen.
Sorgen Sie dafür, dass ein Prozess auch dann bestehen bleibt, wenn die Shell geschlossen ist
Wenn ein Prozess im Hintergrund einer Sitzung durchgeführt wurde, Wenn die Sitzung geschlossen wird, wird der Prozess ebenfalls beendet. Gerade bei instabilen Verbindungen kann dieser Aspekt zum Problem werden (SSH).
In solchen Fällen ist es am einfachsten, es zu verwenden screen
, Aber im Allgemeinen können wir, wenn dies nicht das ist, was wir wollen, dafür sorgen, dass ein Prozess auch nach dem Schließen der Sitzung bestehen bleibt, indem wir einfach aus der Sitzung heraus den Befehl eingeben nohup
.
Dieser Befehl ist immun gegen Aufhänger und kann an einen Prozess ausgegebene SIGHUP-Signale ignorieren.
Der Befehl nohup
Es muss vor dem gewünschten Prozess verwendet werden “trennen”.
~# nohup updatedb &
Jetzt können wir die aktuelle Sitzung beenden, Öffnen Sie ein anderes Terminal und prüfen Sie, ob der Prozess noch läuft ps ax | grep updatedb
.
0 Kommentare