Betrachten Sie die folgende nohup
Ausführung:
nohup script.sh > script.out &
Gibt es eine Möglichkeit, sich vom Terminal abzumelden, die Verbindung wiederherzustellen, den Vorgang wieder in den Vordergrund zu stellen und über die Tastatur mit ihm zu interagieren?
command-line
process
background
nohup
Adam Matan
quelle
quelle
nohup trennt einen Befehl nicht vom Terminal, lässt Ihr Skript ignorieren
SIGHUP
und leitet ihnstdout/stderr
in eine Datei umnohup.out
, sodass der Befehl nach dem Abmelden im Hintergrund weiter ausgeführt werden kann.nohup
stellt den ausgeführten Befehl nicht automatisch in den Hintergrund. Man muss das explizit tun, indem man die Kommandozeile mit einem beendet&
.jobs
kann aktuell ausgeführte Jobs und deren Status drucken. Wenn der Befehljobs
ihn nicht finden kann, ist er kein untergeordneter Prozess dieser Shell mehr.Man kann einen Hintergrundjob in Bash zurück in den Vordergrund bringen,
fg
selbst wenn er mit ausgeführt wirdnohup
. Dies ändert jedoch nichts an der Ausgabeumleitung, die weiterhin in die Datei verschoben wirdnohup.out
.Wenn Sie die Shell / das Terminal schließen oder sich abmelden, ist Ihr Befehl kein untergeordnetes Element dieser Shell mehr. Es gehört zum
init
Prozess. Wenn Sie in suchenpstree
, sehen Sie, dass es jetzt Prozess 1 gehört (init
). Das kann nicht wieder in den Vordergrund gebracht werden, da der Vordergrund nicht mehr existiert.quelle
If the command jobs cannot find it, then it is no longer a child process of that shell.
Das ist falsch: versuchen , diese Sequenz zu sehen , wie:sleep 100 & disown ; echo Jobs:; jobs; echo Tree:; pstree -ap $$
. Nach diesem Befehl wird weiterhin diesleep
Arbeit mit der gleichen PID gedruckt, als Sie sie erzeugt haben, währendjobs
nichts gedruckt wird. Die einzige Möglichkeit, wie ein untergeordneter Prozess aufhören kann, ein untergeordnetes Element zu sein, besteht darin, das übergeordnete Element zu verlieren (dann wird das verwaiste Element zuminit
untergeordneten Element) oder zu forken und zu beenden (aber dann ändert sich die PID, sodass es nicht das ursprüngliche untergeordnete Element ist).Ich werde die Verwendung eines Terminal-Multiplexers unterstützen, aber tmux , nicht screen. Der Bildschirm ist in jeder Hinsicht nicht gewartet. Seine Konfiguration ist eine dunkle Kunst, die wahrscheinlich zuerst in einem Anhang des Necronomicon aufgezeichnet wurde. Der Versuch, eine eigene Konfiguration zu schreiben, ist ein Einblick in Cthulu. Ernsthaft. Schauen Sie sich die .screenrc-Dateien der Leute an . Um sicher zu gehen, gibt es verschiedene Möglichkeiten, um die Abscheulichkeit einer Konfigurationsdatei auf dem Bildschirm zu vermitteln. Byobu leistet eine bewundernswerte Arbeit als Schleier zwischen sterblichen Nutzern und unheiligem Code. Es kommt mit sinnvollen Farben, einer Menüoberfläche und vielleicht am wichtigsten, einer Statusleiste.
Aber wie gesagt, ich empfehle stattdessen tmux . Es sind noch einige kleinere Konfigurationsschritte erforderlich, aber es ist gut dokumentiert , und Ihre Konfigurationsdatei sieht nicht nach Kauderwelsch aus. Außerdem beginnen Sie mit Farben und einer Statusleiste. Vergleichen Sie meine Dateien screenrc und tmux.conf:
quelle
Wenn Sie nur daran interessiert sind, live zu schauen, könnte die Ausgabe zu Ihnen passen:
quelle
Jeder Linux-Befehl kann an den Hintergrund gesendet werden, wobei "
&
" zuletzt angehängt wird.Um alle Hintergrundjobs anzuzeigen, können Sie eine Ausgabe ausführen
jobs
Hier habe ich 3 Jobs im Hintergrund: Zookeeper, Kafka und Mongo Daemon. [1], [2] und [3] sind die jeweiligen Auftragsnummern für diese Aufgaben.
Sie können diese Aufgabe mit in den Vordergrund bringen
fg %$taskNumber.
quelle