Cookie

Senden Sie einen Prozess im Hintergrund und im Vordergrund mit Linux

Veröffentlicht von TheJoe am

Geschätzte Lesezeit: 2 Minuten

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.

Schau hier:  10 Linux-basierte Firewalls

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.


TheJoe

Ich halte diesen Blog als ein Hobby von 2009. Ich bin begeistert von Grafik, Technologie, Open Source Software. Unter meinen Artikel wird nicht schwierig sein, über die Musik finden, und einige persönliche Reflexionen, aber ich bevorzuge die direkte Linie des Blogs vor allem auf Technologie. Weitere Informationen Kontaktieren Sie mich.

0 Kommentare

Hinterlasse eine Antwort

Avatar-Platzhalter

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.