In Bash entfernt der disown
von ihm selbst ausgegebene Befehl Hintergrundprozesse (über bg
oder &
) aus der aktiven Jobtabelle und markiert sie so, dass beim Abmelden kein SIGHUP empfangen wird.
Sie können auch einen oder mehrere Jobs zum Ablehnen übergeben, z disown 1 3
. Das disown -h
Flag ist nützlich, wenn Sie Jobs in der Tabelle behalten möchten, aber beim Abmelden immer noch nicht SIGHUP.
Sie können die Jobtabelle anzeigen, indem Sie den jobs
Befehl eingeben. Nach einem erfolgreichen Hintergrund wird es angezeigt [1]+ command &
. Nachdem ein Job abgelehnt wurde, sollte er nicht mehr in der Jobtabelle angezeigt werden und beim Abmelden nicht mehr beendet werden. Sie können immer noch den Prozess über sehen ps ux
, top
und anderes Prozess-Viewing - Dienstprogramme.
Nachdem ein Job abgelehnt wurde, können Sie warten, bis er auf natürliche Weise beendet wird, oder ein Signal kill
an die PID senden , um ihn zu stoppen.
Da Bash den Job nur aus der Liste der zu beendenden laufenden Jobs entfernt und die Dateihandles für stdout und stderr Ihres Terminals noch geöffnet sind, erhalten Sie weiterhin Ausgaben vom Job, bis Ihr Endgerät geschlossen wird (wenn Sie sich abmelden). .
Beispiele:
# we start a command in the background
$ cat /dev/urandom > test &
[1] 18533
# we see our command is still running
$ jobs
[1]+ Running cat /dev/urandom > test &
# we disown the backgrounded job
$ disown 1
# notice it is no longer in the job table
$ jobs
Ich verwende es normalerweise nur, disown
wenn ich einen möglicherweise lang laufenden Befehl wie ein rsync
oder ausführe cp
und danach entscheide, dass ich mich abmelden muss, ohne ihn zu beenden. Wenn Sie wissen , dass Sie einen Befehl auszuführen und sich abzumelden, können Sie die Ausgabe erfassen durch Rohrleitungen oder tee
in eine Datei ing, läuft es mit nohup
oder läuft es in screen
(die Sie Eigentum an der Befehl zurückzuerobern erlaubt / beenden danach ).
Beispiele:
# capture stdout and stderr to separate logs
cat /dev/urandom >stdout.log 2>stderr.log
# capture stdout and stderr to the same log, and display to stdout as well
cat /dev/urandom 2>&1 | tee output.log
# run a command under nohup (doesn't require a disown or job control support)
nohup cat /dev/urandom </dev/null