Ist es möglich, einen Prozess mit nohup starten zu lassen, statt in eine Datei in stdout zu schreiben? oder vielleicht in der datei und auf dem bildschirm?
nohup python start.py &
schreibt an nohup.out
, aber ich möchte, dass es auf dem Bildschirm ausgegeben wird, nohup ist nur als Absicherung gedacht, wenn die Verbindung unterbrochen wird.
Antworten:
Von
man nohup
:(Vollständig überarbeitet, basierend auf Kommentaren)
Beim Verlassen einer Shell oder Schließen eines Terminals werden die untergeordneten Prozesse mit SIGHUP (Auflegen, der Name stammt aus der Zeit, als sich Terminals in den UNIX-Computer einwählen) gesendet, um ihnen mitzuteilen, dass es sich bei dem Terminal um Nein handelt länger verbunden. Wenn der Shell-Prozess beendet wird, werden außerdem die Streams stdin, stdout und stderr des untergeordneten Prozesses geschlossen. Normalerweise führt dies dazu, dass der untergeordnete Prozess stirbt. Normalerweise ist dies eine gute Sache, da vermieden wird, dass Prozesse ohne Benutzer ausgeführt werden.
Der Zweck des
nohup
Programms besteht darin, den Prozess auch nach dem Beenden der Shell und dem Trennen der Verbindung zum Terminal weiter laufen zu lassen. Das Leiten der Ausgabe an das Terminal ist dementsprechend zweckentfremdend. Meine ursprüngliche Antwort (nohup COMMAND | cat
) war nicht hilfreich, weil: Wenn das Terminal geschlossen ist, wird die Ausgabe der Katze geschlossen und so stirbt die Katze, was die Pipe bricht und ein SIGPIPE an den Nohup-Prozess sendet, wodurch sie abstirbt. Ich hatte die Frage beantwortet, ohne an den Zweck zu denken.Um Ihren Zweck zu erreichen, führen Sie aus
nohup COMMAND > FILE
, um den Namen der Datei auszuwählen, an die die Ausgabe erfolgen soll. Verwenden Sie danntail -f FILE
, um die Ausgabe auf einem Terminal anzusehen.In ähnlicher Weise könnte man das folgende Shell-Konstrukt verwenden:
COMMAND >FILE 2>&1 </dev/null &
um einen Befehl auszuführen, dessen stdio-Streams nicht mit dem Terminal verbunden sind und nach dem Schließen des Terminals weiter ausgeführt werden können. Führen Sie in zsh außerdem die integrierte Shell ausdisown
, um zsh anzuweisen , den Prozess zu verlassen, anstatt ihn zu beenden , wenn die Shell endet.quelle
tail -f filename
damit sehen, was in die Datei geschrieben wird.nohup python start.py & tail -f nohup.out
Dertail -f
kann nach Belieben getötet und neu gestartet werden.screen python start.py
und nach Belieben trennen / wieder verbinden.quelle