SIGHUP
Материал из Википедии — свободной энциклопедии
Описание: | Потеря соединения с терминалом |
---|---|
По умолчанию: | завершение процесса |
коды SA_SIGINFO | |
(не имеет специфических кодов) |
В 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 посылается:
- При прерывании соединения на последовательной линии, программам, запущенным с терминала подключенного к ней, часто из-за того, что пользователь отсоединяет свой модем от телефонной или выделенной линии. Операционная система определяет разрыв соединения по исчезновению сигнала «несущая» (англ. carrier detect, DCD) последовательного порта.
- При закрытии псевдо- или виртуальных терминалов, которые используются на современных системах вместо аппаратных терминалов.
- Утилитой или функцией
kill
, с консоли или из скрипта/утилиты для управления демоном, для выполнения предусмотренного действия (обычно — перечитывания конфигурации и переинициализации).
Обычным действием по умолчанию для SIGHUP в POSIX-системах является завершение процесса.
Unix-шелл, при получении SIGHUP, обычно запускает заново все остановленные задачи, перед посылкой им SIGHUP. В других реализациях (например, GNU bash), шелл «отрекается» от всех дочерних задач перед завершением (и они продолжают работать).
SIGHUP может быть перехвачен или проигнорирован программой.
Для предотвращения завершения SIGHUP стандартных программ и утилит, существует утилита nohup
(«префикс» для программы в командной строке). nohup
настраивает игнорирование SIGHUP, после чего запускает программу с аргументами в фоновом режиме с перенаправлением вывода в файл nohup.out
в текущем или домашнем каталоге пользователя.
Сигналы POSIX |
SIGABRT | SIGALRM | SIGFPE | SIGHUP | SIGILL | SIGINT | SIGKILL | SIGPIPE | SIGQUIT | SIGSEGV | SIGTERM | SIGUSR1 | SIGUSR2 | SIGCHLD | SIGCONT | SIGSTOP | SIGTSTP | SIGTTIN | SIGTTOU | SIGBUS | SIGPOLL | SIGPROF | SIGSYS | SIGTRAP | SIGURG | SIGVTALRM | SIGXCPU | SIGXFSZ |
Сигналы реального времени (определяемые пользователем) — SIGRTMIN - SIGRTMAX. |
Некоторые сигналы не включенные в POSIX и синонимы |
SIGIOT | SIGEMT | SIGSTKFLT | SIGIO | SIGCLD | SIGPWR (SIGINFO) | SIGLOST | SIGWINCH | SIGUNUSED |