Запитуючи це після тривалої дискусії з колегою, я дуже хотів би пояснення тут.
Я запускаю фоновий процес, додаючи " &
" до командного рядка або зупиняючи його CTRL-Z
і відновлюючи його у фоновому режимі з " bg
". Потім я виходжу.
Що сталося?
Ми були цілком впевнені, що це повинно було бути вбито СІДУ, але цього не сталося; після повторного входу в систему, процес був щасливо запущений і pstree
показав, що його "прийняли" init
.
Це очікувана поведінка?
Але тоді, якщо це так, яка nohup
мета команди? Це просто виглядає так, що процес ні в якому разі не буде вбито, з ним чи без нього ...
Редагуйте 1
Ще кілька деталей:
- Команда була запущена з сеансу SSH, а не з фізичної консолі.
- Команда була запущена без
nohup
та / або&
; Потім його було призупиненоCTRL-Z
та відновлено у фоновому режимі зbg
. - Сеанс ssh не припинявся. Був власне вихід (
exit
команда " "). - Процес був
scp
операцією копіювання файлів. - Після входу знову
pstree
показав процес, який працює та є дитиною дитиниinit
.
Редагуйте 2
Більш чітко викласти питання: чи покласти процес у фоновий режим (використовуючи &
чи bg
) змусить його ігнорувати SIGHUP
, як і nohup
команда?
Правка 3
Я спробував вручну посилаючи SIGHUP
до scp
: він вийшов, так що це безумовно не ігнорувати сигнал.
Потім я знову спробував його запустити, відклавши його на задній план і вийти з системи: його "прийняли" init
і продовжували працювати, і я знайшов його там, коли входив назад.
Зараз я зовсім спантеличений. Схоже, що жодного SIGHUP
разу не було надіслано.
1>/dev/null 2>&1
на баш, тощо?