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