W Bash disown
wydane przez siebie polecenie usunie procesy działające w tle (przez bg
lub &
) z aktywnej tabeli zadań i oznaczy je, aby nie otrzymywały POWIĘKSZENIA po wylogowaniu.
Możesz także przekazać jedno lub więcej zadań do odrzucenia, np disown 1 3
. disown -h
Flaga jest przydatna, jeśli chcesz zachować miejsca pracy w tabeli, ale nadal nie SIGHUP na wylogowania.
Możesz wyświetlić tabelę zadań, wydając jobs
polecenie. Po udanym tle pojawi się [1]+ command &
. Po odrzuceniu zadania nie powinno ono być wyświetlane w tabeli zadań i nie powinno być zabijane podczas wylogowywania. Nadal można zobaczyć proces za pomocą ps ux
, top
oraz innych narzędzi procesowych oglądania.
Po odrzuceniu zadania możesz poczekać na jego naturalne zakończenie lub wysłać sygnał kill
do PID, aby go zatrzymać.
Ponieważ Bash po prostu usuwa zadanie z listy uruchomionych zadań do zakończenia, a uchwyty plików na stdout terminala i stderr są nadal otwarte, będziesz otrzymywać dane wyjściowe z zadania do momentu zamknięcia urządzenia terminala (po wylogowaniu) .
Przykłady:
# 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
Zwykle używam tylko disown
jeśli uruchomić polecenie potencjalnie długo działa jak rsync
lub cp
a potem zdecydować, muszę się wylogować bez zakończenia go. Jeśli wiesz, że zamierzasz uruchomić polecenie i wylogować się, możesz przechwycić dane wyjściowe, przesyłając je strumieniowo lub tee
wrzucając do pliku, uruchamiając je nohup
lub uruchamiając screen
(co pozwala ci odzyskać własność polecenia / zakończyć później ).
Przykłady:
# 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