SIGHUP

редактировать

На POSIX -совместимых платформах, SIGHUP ("sig nal h ang up ") - это сигнал , отправляемый процессу, когда его управляющий терминал закрыт. (Первоначально он был разработан для уведомления процесса об отключении последовательной линии .) SIGHUP - это символическая константа , определенная в заголовочном файле signal.h .

Содержание
  • 1 История
  • 2 Современное использование
  • 3 Подробности
  • 4 Ссылки
  • 5 См. Также
История
Зависание часто было результатом того, что подключенный пользователь физически повесил модем

Доступ к компьютерным системам в течение многих лет заключался в подключении терминала к системе мэйнфрейма через последовательную линию и протокол RS-232 . По этой причине, когда разрабатывалась система программных прерываний, называемых сигналами, сигнал был предназначен для использования при "зависании".

SIGHUP будет посылаться в программы при отключении последовательной линии, часто из-за того, что подключенный пользователь прервал соединение, повесив модем. Система обнаружит, что линия была прервана через сигнал потерянного Data Carrier Detect (DCD).

Сигналы всегда были удобным методом межпроцессного взаимодействия (IPC), но в ранних реализациях не было сигналов, определяемых пользователем (таких как более поздние добавления SIGUSR1 и SIGUSR2 ), которые программы могут перехватывать и интерпретировать для своих целей. По этой причине приложения, которым не требовался управляющий терминал, такие как демоны, будут перенаправлять SIGHUP как сигнал для повторного чтения файлов конфигурации или повторной инициализации. Это соглашение сохранилось и по сей день в таких пакетах, как Apache и Sendmail.

Современное использование

С уменьшением доступа через последовательную линию, значение SIGHUP несколько изменилось. современные системы, часто означающие, что управляющий псевдотерминал или виртуальный терминал был закрыт. Если команда выполняется внутри окна терминала, и окно терминала закрывается, пока процесс команды все еще работает, он получает SIGHUP.

Если процесс, получающий SIGHUP, является оболочкой Unix, тогда как часть управления заданиями он часто перехватывает сигнал и гарантирует, что все остановленные процессы продолжаются перед отправкой сигнала дочерним процессам (точнее, группы процессов, представленные внутри оболочкой как «задание»), который по умолчанию их завершает.

Это можно обойти двумя способами. Во-первых, Единая спецификация UNIX описывает служебную программу оболочки с именем nohup, которую можно использовать в качестве оболочки для запуска программы и по умолчанию игнорировать SIGHUP. Во-вторых, дочерние группы процессов могут быть "отклонены" путем вызова disown с помощью, который удаляет группу процессов из таблицы заданий оболочки (чтобы они не отправлялись SIGHUP) или (необязательно) сохраняет их в таблица заданий, но не позволяет им получать сигнал SIGHUP при завершении работы оболочки.

Различные оболочки также имеют другие методы контроля и управления SIGHUP, такие как возможность disown в ksh. В документации большинства современных дистрибутивов Linux указано использование kill -HUP для отправки сигнала SIGHUP. Программы

Daemon иногда используют SIGHUP в качестве сигнал для перезапуска, наиболее частая причина этого - перечитать файл конфигурации, который был изменен.

Подробности

Используются символические имена сигналов, поскольку номера сигналов могут различаться на разных платформах, но XSI -соответствующие системы позволяют использовать числовую константу 1 для обозначения SIGHUP, который фактически используется подавляющим большинством систем.

SIGHUP может быть обработан. То есть программисты могут определить действие, которое они хотят выполнить при получении SIGHUP, например, вызов функции , ее игнорирование или восстановление действия по умолчанию.

Действие по умолчанию в POSIX -совместимых системах - аварийное завершение.

Ссылки
См. Также
Последняя правка сделана 2021-06-06 03:30:27
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте