SIGHUP - SIGHUP

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

История

А вешать трубку часто было результатом того, что подключенный пользователь физически повесил модем

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

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

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

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

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

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

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

В разных оболочках также есть другие методы контроля и управления SIGHUP, такие как отречься объект кш. Самый современный Дистрибутивы Linux документация указать с использованием убийство -HUP <идентификатор процесса> для отправки сигнала SIGHUP.[3]

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

Подробности

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

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

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

Рекомендации

  1. ^ Керриск, Майкл, изд. (25 июля 2009 г.), «СИГНАЛ (7)», Руководство программиста Linux (версия 3.22), Архивы ядра Linux, получено 23 сентября 2009.
  2. ^ Гаррелс, Махтельт, изд. (27 декабря 2008 г.), "Сигналы", Руководство по Bash для начинающих, вер. 1.11, Проект документации Linux, получено 23 сентября 2009.
  3. ^ Керриск, Майкл, изд. (25 июля 2009 г.), «УБИТЬ (2)», Руководство программиста Linux (версия 3.22), Архивы ядра Linux, получено 23 сентября 2009.

Смотрите также