Коли ви закриваєте термінал, термінал надсилає сигнал оболонки SIGHUP; оболонка, у свою чергу, посилає сигнал SIGHUP всім своїм дочірнім процесовим групам, які включають фонові групи процесів;
Те, як кожен процес буде реагувати на сигнал, повністю залежить від процесу: якщо процес не визначив обробник сигналу і скаже ядро (через деякий syscall, такий як signal()
або sigaction()
), що він хоче обробити його, ядро виконує обробник за замовчуванням для сигналу, який у випадку сигналу SIGHUP полягає у припиненні процесу.
Однак, коли ви запускаєте команду з sudo
, UID sudo
процесу та його дочірнього процесу встановлюється 0
(root); в цілому, якщо UID процесу передачі сигналу 0
(root) або такий же, як і цільовий процес, ядро відхиляє сигнал (тобто: процес не може надсилати сигнали до процесу, що належить іншому користувачеві, якщо процес передача сигналу належить корінь); тому процес, керований користувачем, такий як екземпляр Bash, керований терміналом, не може ЗНАЧИТИ sudo
процес і, в кінцевому рахунку, закриття терміналу не впливає на процес, розпочатий з sudo
.