В результате завершения оболочки POSIX.1-2008 требует:
Если выход из процесса приводит к тому, что группа процессов становится осиротевшей, и если какой-либо член вновь осиротевшей группы процессов остановлен, то сигнал SIGHUP, за которым следует сигнал SIGCONT, должен быть отправлен каждому процессу в вновь осиротевшей группе процессов ,
Действие по умолчанию при получении SIGHUP - завершить процесс. Однако, в зависимости от оболочки и способа запуска процесса, а также от любой обработки сигналов, установленной самим процессом, SIGHUP может быть проигнорирован процессом. В этом случае процесс продолжит нормальное выполнение.
Предполагается, что процессы в группе процессов, выполняемые под оболочкой управления заданиями, будут управляться этой оболочкой как группой, а не пользователем, посылающим прямые сигналы SIGSTOP и SIGCONT. POSIX.1-2008 объясняет:
... если завершение процесса приводит к тому, что группа процессов становится осиротевшей, процессы внутри группы отключаются от своей оболочки управления заданиями, которая больше не имеет никакой информации о существовании группы процессов. Остановленные процессы внутри группы будут чахнуть навсегда. Чтобы избежать этой проблемы, недавно потерянные группы процессов, которые содержат остановленные процессы, отправляют сигнал SIGHUP и сигнал SIGCONT, чтобы указать, что они были отключены от своего сеанса. Сигнал SIGHUP приводит к тому, что члены группы процессов завершаются, если они не перехватывают или игнорируют SIGHUP. В большинстве случаев все участники группы процессов останавливаются, если кто-либо из них останавливается.
Процесс может избежать такого поведения, разветвив и создав собственный сеанс (setsid()
), чтобы он больше не был частью сеанса оболочки, в которой он был запущен. В этом случае на него не влияют управление заданиями внутри оболочки, завершение оболочки или сигналы, генерируемые терминалом.