Сообщить об ошибке.

Сигналы модуля signal в Python

Сигналы, определяемые модулем signal

Модуль signal определяет переменные, представляющие собой сигналы операционной системы.

Содержание:


Примечание для SIG*:

Все номера сигналов определены символически. Например, сигнал зависания определяется как signal.SIGHUP; Имена переменных идентичны именам, используемым в программах на языке C, как в файле signal.h. В справочной странице Unix для функции signal() перечислены существующие сигналы, в некоторых системах это signal(2), в других - в signal(7).

Обратите внимание, что не все системы определяют одинаковый набор имен сигналов. Модуль signal определяет только те имена, которые определены системой.

signal.SIGABRT:

Переменная signal.SIGABRT прерывает сигнал от abort(3).

signal.SIGALRM:

Переменная signal.SIGALRM это сигнал таймера от alarm(2).

Доступность: Unix.

signal.SIGBREAK:

Переменная signal.SIGBREAK определяет сигнал прерывания с клавиатуры CTRL + BREAK.

Доступность: Windows.

signal.SIGBUS:

Переменная signal.SIGBUS определяет сигнал ошибки шины (ошибка доступа к памяти).

Доступность: Unix.

signal.SIGCHLD:

Переменная signal.SIGCHLD определяет сигнал - дочерний процесс остановлен или завершен.

Доступность: Windows.

signal.SIGCLD:

Переменная signal.SIGCLD это псевдоним для signal.SIGCHLD.

signal.SIGCONT:

Переменная signal.SIGCONT определяет сигнал - продолжить процесс, если он в данный момент остановлен.

Доступность: Unix.

signal.SIGFPE:

Переменная signal.SIGFPE представляет собой сигнал исключения с плавающей точкой. Например, деление на ноль.

Смотрите также исключение ZeroDivisionError, которое возникает, когда второй аргумент операции деления или по модулю равен нулю.

signal.SIGHUP:

Переменная signal.SIGHUP определяет сигнал - обнаружено зависание на управляющем терминале или завершение процесса управления.

Доступность: Unix.

signal.SIGILL:

Переменная signal.SIGILL определяет сигнал - неправильная инструкция.

signal.SIGINT:

Переменная signal.SIGINT определяет сигнал прерывания с клавиатуры CTRL + C.

Действие по умолчанию - поднять исключение KeyboardInterrupt.

signal.SIGKILL:

Переменная signal.SIGKILL определяет сигнал Kill.

Этот сигнал нельзя поймать, заблокировать или игнорировать.

Доступность: Unix.

signal.SIGPIPE:

Переменная signal.SIGPIPE определяет сигнал - прерывание pipe: пишите в pipe без читателей.

Действие по умолчанию - игнорировать сигнал.

Доступность: Unix.

signal.SIGSEGV:

Переменная signal.SIGSEGV определяет сигнал - ошибка сегментации: неверная ссылка на память.

signal.SIGTERM:

Переменная signal.SIGTERM определяет сигнал завершения.

signal.SIGUSR1:

Переменная signal.SIGUSR1 определяет пользовательский сигнал №1.

Доступность: Unix.

signal.SIGUSR2:

Переменная signal.SIGUSR2 определяет пользовательский сигнал №2.

Доступность: Unix.

signal.SIGWINCH:

Переменная signal.SIGWINCH определяет сигнал изменения размера окна.

Доступность: Unix.

signal.CTRL_C_EVENT:

Переменная signal.CTRL_C_EVENT определяет сигнал, соответствующий событию нажатия клавиш Ctrl+C. Этот сигнал может использоваться только с функцией os.kill().

Доступность: Windows.

signal.CTRL_BREAK_EVENT:

Переменная signal.CTRL_BREAK_EVENT определяет сигнал, соответствующий событию нажатия клавиши Ctrl+Break. Этот сигнал может использоваться только с функцией os.kill().

Доступность: Windows.

New in version 3.2.

signal.NSIG:

Переменная signal.NSIG определяет сигнал, который на один больше номера самого высокого номера сигнала.

Полезно для получения действительных номеров сигналов на данной платформе, например range(1, signal.NSIG).

Дополнительно смотрите функцию signal.valid_signals().

Примеры зарегистрированных обработчиков сигналов.

Ниже представлены зарегистрированные обработчики сигналов или одно из специальных значений signal.SIG_IGN - если сигнал игнорируется, signal.SIG_DFL - если используется поведение по умолчанию или None - если существующий обработчик сигнала был зарегистрирован из языка C, а не Python.

import signal

def alarm_received(n, stack):
    return

signal.signal(signal.SIGALRM, alarm_received)

signals_to_names = {
    getattr(signal, n): n
    for n in dir(signal)
    if n.startswith('SIG') and '_' not in n
}

for s, name in sorted(signals_to_names.items()):
    handler = signal.getsignal(s)
    if handler is signal.SIG_DFL:
        handler = 'SIG_DFL'
    elif handler is signal.SIG_IGN:
        handler = 'SIG_IGN'
    print('{:<10} ({:2d}):'.format(name, s), handler)

В каждой ОС могут быть определены разные сигналы, выходные данные в других системах могут отличаться. Вывод представлен для Debian.

SIGHUP     ( 1): SIG_DFL
SIGINT     ( 2): <built-in function default_int_handler>
SIGQUIT    ( 3): SIG_DFL 
SIGILL     ( 4): SIG_DFL 
SIGTRAP    ( 5): SIG_DFL 
SIGIOT     ( 6): SIG_DFL 
SIGBUS     ( 7): SIG_DFL 
SIGFPE     ( 8): SIG_DFL 
SIGKILL    ( 9): SIG_DFL 
SIGUSR1    (10): SIG_DFL 
SIGSEGV    (11): SIG_DFL 
SIGUSR2    (12): SIG_DFL 
SIGPIPE    (13): SIG_IGN
SIGALRM    (14): <function alarm_received at 0x7f8972279e18>
SIGTERM    (15): SIG_DFL
SIGCLD     (17): SIG_DFL
SIGCONT    (18): SIG_DFL
SIGSTOP    (19): SIG_DFL
SIGTSTP    (20): SIG_DFL
SIGTTIN    (21): SIG_DFL
SIGTTOU    (22): SIG_DFL
SIGURG     (23): SIG_DFL
SIGXCPU    (24): SIG_DFL
SIGXFSZ    (25): SIG_IGN
SIGVTALRM  (26): SIG_DFL
SIGPROF    (27): SIG_DFL
SIGWINCH   (28): SIG_DFL
SIGPOLL    (29): SIG_DFL
SIGPWR     (30): SIG_DFL
SIGSYS     (31): SIG_DFL
SIGRTMIN   (34): SIG_DFL
SIGRTMAX   (64): SIG_DFL