Розглянемо, що ви відкрили gedit
текстовий редактор з терміналу і працюєте над ним. Якщо ви закриєте термінал перед закриттям gedit
, gedit також закриється, як тільки закриє термінал. То що тут відбувається? gedit
Працює як дочірній процес під терміналом. Коли ви закриваєте термінал , сигнал зависання ( SIGHUP
) надсилається до процесу, який вбиває дочірній процес.
З іншого боку, якщо ви хочете, щоб ваш дочірній процес (тут gedit
) продовжував працювати навіть після закриття батьківського терміналу, ви хочете, щоб ваш процес не був захищений від сигналу відключення. Так що закриття терміналу не закриває дочірній процес. nohup
виконує саме цю роботу.
nohup
не відключає команду від терміналу , вона змушує ваш скрипт ігнорувати SIGHUP і перенаправляє stdout / stderr у файл nohup.out, щоб команда могла продовжувати працювати у фоновому режимі після виходу. Якщо закрити оболонку / термінал або вийти з системи, ваша команда більше не є дочірньою оболонкою. Належить до процесу init. Якщо здійснити пошук, pstree
ви побачите, що зараз йому належить процес 1 (init). Це неможливо повернути на перший план, оскільки переднього плану більше не існує.
disown
це краща альтернативаnohup
. Виконайте фонову команду зcommand &
абоCtrl-Z
, а потім використовуйтеdisown
для від'єднання її від оболонки.