Грэм, Томас
- 1 year ago
- 0
- 0
В POSIX -системах, SIGHUP — сигнал , посылаемый процессу для уведомления о потере соединения с управляющим терминалом пользователя.
SIGHUP — целочисленная константа, определённая в заголовочном файле
signal.h
. Символьные имена сигналов используются вместо номеров, так как в разных реализациях номера сигналов могут различаться.
POSIX закрепляет за SIGHUP значение 1. Например, для активации новых терминалов после их добавления в файл
/etc/ttys
рекомендуется послать SIGHUP процессу
init
, командой «
kill -1 1
» (init имеет PID = 1).
SIG — общий префикс , означающий «сигнал», HUP — сокращенное написание англ. hang up — отбой, прерывание линии.
Много лет доступ к компьютерам (мэйнфреймам) осуществлялся подсоединением к ним компьютерных терминалов через последовательные линии (например, линии стандарта RS-232 ). Поэтому при разработке системы сигналов был определен сигнал разрыва соединения, для завершения всех программ запущенных с потерянного терминала.
Сигналы всегда были удобным средством межпроцессного взаимодействия, но ранние разработки не включали в себя пользовательских сигналов (таких как появившиеся позднее SIGUSR1 и SIGUSR2 ), которые программа могла использовать для собственных нужд. По этой причине, в программах, не использующих при своей работе управляющих терминалов, например демонах , SIGHUP стали использовать для переинициализации (перечитывания файлов конфигурации). Такое использование SIGHUP сохранилось и по сей день, как в старых и стандартных программах ( init , inetd , cron , Sendmail , Apache …), так и в большинстве новых, и считается стандартом де-факто.
Сигнал SIGHUP посылается:
kill
, с консоли или из скрипта/утилиты для управления
демоном
— для выполнения предусмотренного действия (обычно перечитывания конфигурации и переинициализации).
Обычным действием по умолчанию для SIGHUP в POSIX-системах является завершение процесса.
Unix-шелл при получении SIGHUP обычно запускает заново все остановленные задачи перед посылкой им SIGHUP. В других реализациях (например, GNU bash ) шелл «отрекается» от всех дочерних задач перед завершением (и они продолжают работать) [ источник не указан 2550 дней ] .
SIGHUP может быть перехвачен или проигнорирован программой.
Для предотвращения завершения SIGHUP
стандартных
программ и утилит существует утилита
nohup
(«префикс» для программы в командной строке).
nohup
настраивает игнорирование SIGHUP, после чего запускает программу с аргументами в фоновом режиме с перенаправлением вывода в файл
nohup.out
в текущем или домашнем каталоге пользователя.