nohupі зовсімdisown -h не те саме.
З disown, процес вилучається зі списку завдань у поточній інтерактивній оболонці. Запуск jobsпісля запуску фонового процесу та запуску disownне відображатиме цей процес як завдання в оболонці. Відмовлене завдання не отримуватиме HUPз оболонки, коли вона завершиться (але див. Примітку наприкінці).
З disown -h, завдання не вилучається зі списку завдань, але оболонка не надсилатиме йому HUPсигнал, якщо він вийшов (але дивіться примітку наприкінці).
nohupУтиліта ігнорує HUPсигнал і запускає дану утиліту. Утиліта успадковує сигнальну маску від nohupі тому також ігнорує HUPсигнал. Коли оболонка припиняється, процес залишається дочірнім процесом nohup(і nohupпереналагоджений для init).
Різниця полягає в тому, що процес розпочався з nohupігнорування, HUPнезалежно від того, хто надсилає сигнал. У відрікся процеси просто не послав на HUPсигнал оболонкою , але по- , як і раніше може бути посланий сигнал , наприклад , від kill -s HUP <pid>і не буде ігнорувати це.
Зауважте, що HUPвін надсилається до завдань оболонки лише у випадку, якщо
- оболонка - оболонка для входу, і встановлено
huponexitпараметр оболонки, або
- оболонка сама приймає
HUPсигнал.
Відповідні біти в bashпосібнику (мій акцент):
СИГНАЛИ
[...]
Оболонка виходить за замовчуванням після отриманняSIGHUP . Перед виходом інтерактивна оболонка надсилає SIGHUPвсі завдання, запущені або зупинені. Зупинені завдання надсилаються SIGCONTдля забезпечення їх отримання
SIGHUP. Щоб оболонка не посилала сигнал на певне завдання, його слід видалити з таблиці завдань за допомогою disownвбудованого (див. SHELL BUILTIN COMMANDSНижче) або позначити, щоб не отримувати SIGHUP
використання disown -h.
Якщо параметр huponexitоболонки встановлено shopt, він bashнадсилає
SIGHUPна всі завдання, коли виходить інтерактивна оболонка входу.
disown [-ar] [-h] [jobspec ... | pid ... ]
Без параметрів видаліть кожну jobspecзі таблиці активних завдань. [...] Якщо -hопція задана, кожен jobspecбуде з сайту не видаляються з таблиці, але відзначений так , що SIGHUPне потрапляють на роботу , якщо оболонка отримуєSIGHUP . [...]
Пов'язані:
nohup, вам потрібно перенаправити stdin / stdout / stderr подалі від TTY (якщо ваша оригінальна оболонка буде підключена до однієї) самостійно. (OTOH, я насправді вважаю, що краща практика, ніж покладатися на жахливий жорсткий код за замовчуванням, як./nohup.out).