2016-04-11 13 views
0

Ich möchte ein Bash-Skript schreiben, das zwei Befehle im Hintergrund ausführt. Ich benutze dazu nohup:Wie kann verhindert werden, dass Nohup die Befehlszeile "verstopft"?

nohup cmd1 & 
nohup cmd2 & 

Allerdings läuft nur der 1. Befehl im Hintergrund.

Wenn ich nohup cmd1 & manuell in der Befehlszeile ausführen. Zuerst gebe ich nohup cmd1 & ein und drücke Enter. Dies startet den Prozess:

enter image description here

Aber dann muss ich wieder getroffen eingeben, um einen anderen Befehl eingeben:

enter image description here

ich denke, das ist „Verstopfung“ up die Befehlszeile, und verursacht, dass mein Bash-Skript bei dem ersten nohup ... &-Befehl stecken bleibt.

Gibt es eine Möglichkeit, dies zu verhindern?

+0

Können Sie versuchen, etwas wie: 'Schlaf 5 'in zwischen den Nohup-Befehlen? – ryekayo

+0

@ryekayo es ist für immer verstopft im Gegensatz zu nur 5 Sekunden. – applecider

+0

Es ist nicht notwendig, Enter zu drücken; Der Text, der den Cursor bewegte, ist beunruhigend, aber harmlos. – tripleee

Antwort

2

Nichts ist "verstopft". Der erste Befehl, der im Hintergrund ausgeführt wird, druckt eine Ausgabe nach Ihre Shell druckt die nächste Eingabeaufforderung. Die Shell wartet darauf, dass Sie einen Befehl eingeben, obwohl sich der Cursor nicht mehr in derselben Zeile wie die Eingabeaufforderung befindet. Das extra Geben Sie ist ein leerer Befehl, die Shell zu Drucken eine andere Eingabeaufforderung verursacht. Es ist harmlos, aber unnötig.

0

Lassen Sie mich etwas zu nohup sagen, weil ich nicht sicher bin, ob Sie sicher sind, was es tut. Kurz gesagt, der Befehl nohup ist nicht erforderlich, um einen Prozess im Hintergrund auszuführen. Das kaufmännische Und am Ende der Zeile macht es.

nohup verhindert, dass der Hintergrundprozess SIGHUP (HUP für aufzuhängen) vom Empfang, wenn Sie die Klemme zu schließen, wo die Ausgangsschale läuft. SIGHUP würde den Prozess effektiv beenden.

Wenn mit nohup gestartet wird, wird der Prozess dieses Ereignis nicht empfangen und wird weiter ausgeführt, Besitz des Init-Prozesses (PID 1), wenn das Terminal geschlossen wird.

Außerdem leitet der Befehl nohup die Standardausgabe des gesteuerten Prozesses in eine Datei um, was bedeutet, dass er nicht mehr auf dem Bildschirm erscheint. Standardmäßig heißt diese Datei nohup.out.

Verwandte Themen