Das ist mein Verständnis über die Nutzung &
, disown
und nohup
:
<command>
: Läuft den Prozess innerhalb des aktuellen Terminalbash
beispielsweise im Vordergrund (dh das Verfahren als aufgeführtenbash
Vordergrund Job undstdin
,stdout
undstderr
immer noch an das Endgerät gebunden ); nicht immun gegen Hangups ;<command> &
: Läuft den Prozess innerhalb des aktuellen Terminalbash
Beispiel im Hintergrund (dh das Verfahren als aufgeführtenbash
Hintergrund Job undstdin
,stdout
undstderr
sind immer noch an das Endgerät gebunden ); nicht immun gegen Hangups ;<command> & disown
: Läuft den Prozess innerhalb des aktuellen Terminalbash
Beispiel im Hintergrund , aber der Prozess wird von den freistehendenbash
's Arbeitsplätzen Liste (dh des Prozess aufgeführt ist nicht alsbash
Vordergrund / Hintergrund - Job undstdin
,stdout
undstderr
ist immer noch gebunden an das Terminal ); immun gegen Hangups ;nohup <command> & disown
: Läuft den Prozess innerhalb des aktuellen Terminalbash
Beispiel im Hintergrund , aber der Prozess wird von den freistehendenbash
's Arbeitsplätzen Liste (dh des Prozess aufgeführt ist nicht alsbash
Vordergrund / Hintergrund - Job undstdin
,stdout
undstderr
wird nicht noch gebunden an das Terminal ) ; immun gegen Hangups ;
Also, abgesehen von nohup <command> & disown
Sperrung stdin
und Umleitung stdout
und stderr
auf nohup.out
standardmäßig scheint es mir , wie es zu völlig gleichwertig betrachtet werden kann <command> & disown
.
Ist das vor allem richtig? Irrtum?
bash
Instanz den Prozess nicht beendetAntworten:
Ihr Verständnis ist grundsätzlich richtig. Beide
disown
undnohup
werden verwendet, um das Beenden einer laufenden Shell-Sitzung zu ermöglichen, ohne laufende Jobs zu stoppen. Einige Klarstellungen:Es gibt keinen Grund zu rennen
nohup command & disown
,nohup
wird es schon für Sie verleugnen.nohup
wird von POSIX definiert, während diesdisown
nicht der Fall ist . Dies bedeutet , dass während viele Schalen (zBbash
,zsh
,ksh
) es haben, andere (zum Beispieltcsh
,csh
,dash
undsh
) wird es nicht.disown
kann nach dem Start eines Befehlsnohup
verwendet werden, muss aber zuvor verwendet werden.Soweit ich das beurteilen kann, ist die tatsächliche Wirkung der beiden Befehle dieselbe. Sie haben alle Eigenschaften, die dem anderen fehlen (siehe
help disown
undman nohup
), aber ihre Grundfunktion ist die gleiche, ja.Um diese Tools und ihre Unterschiede ausführlicher zu diskutieren, lesen Sie die Antworten hier:
disown -h
undnohup
effektiv arbeiten?quelle
Nohup
unddisown
sind nicht dasselbe und beide Befehle zusammen zu verwenden ist NICHT redundant. Siehe diese Antwort für eine ausführliche BeschreibungIhr erster bis dritter Punkt scheinen in Ordnung zu sein, obwohl dies
stdin, stdout and stderr are still bound to the terminal
kein richtiger Begriff ist.stdin
ist immer an das Terminal gebunden, in dem Sinne, dass Sie den Dateinamen immer über das Terminal oder über Methoden, die das Terminal verwenden, in einen Befehl eingeben würden.stdout and stderr are still bound to the terminal
alles ok.Ihr habt
stdin, stdout and stderr are not still bound to the terminal
im vierten Punkt was nicht stimmt wie in meinem vorherigen Absatz erwähnt. Auch hier verwenden Sie/dev/null
als Eingabedatei diecommand
, wenn der Befehl beispielsweise lautetcat
, verwenden Sie sie alscat /dev/null
.Der Befehl an Ihrem 5. Punkt ist nicht richtig ausgedrückt, Sie haben ihn verwendet
nohup <command> & disown
, während Sie den einennohup
oderdisown
anderen nicht benötigen. Ihre Zwecke sind die gleichen (um das zu ignorierenSIGHUP
), aber sie funktionieren auf eine etwas andere Art und Weise. So kann der Befehl so vereinfacht werdennohup <command> &
.quelle