У Bash disown
команда, видана самою собою, видалить фонові (через bg
або &
) процеси з активної таблиці завдань та позначить їх, щоб вони не отримували SIGHUP при виході.
Ви також можете передати одне або кілька завдань, щоб скасувати, наприклад disown 1 3
. disown -h
Прапор корисний , якщо ви хочете , щоб зберегти робочі місця в таблиці, але до сих пір не SIGHUP на виході з системи.
Можна переглянути таблицю завдань, видавши jobs
команду. Після успішного тла це покаже [1]+ command &
. Після відмови від роботи вона більше не відображатиметься в таблиці завдань і більше не вбивається під час виходу. Ви все ще можете переглянути процес з допомогою ps ux
, top
і інший технологічним розглядає утиліт.
Після відмови від роботи ви можете зачекати, коли воно закінчиться природним чином, або надіслати сигнал kill
до PID, щоб зупинити його.
Оскільки Bash просто видаляє завдання зі списку запущених завдань, які потрібно припинити, і файл переходить на stdout та stderr вашого терміналу, все ще відкриті, ви продовжуватимете отримувати вихід із завдання, поки ваш термінальний пристрій не закриється (коли ви вийдете) .
Приклади:
# 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
Я зазвичай використовую тільки disown
якщо я біжу потенційно тривалий команду на кшталт rsync
чи , cp
а потім вирішити , мені потрібно , щоб вийти без припинення його. Якщо ви знаєте, що збираєтеся запускати команду та виходити з системи, ви можете захопити висновок, констатувавши його або tee
перенести у файл, запустивши його nohup
або запустивши його screen
(що дозволяє вам знову повернути право власності на команду / завершити після цього ).
Приклади:
# 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