#perl #signals
#perl #сигналы
Вопрос:
Какие сигналы приведут к остановке выполнения программы на Perl, если их %SIG
записи явно не заданы?
Комментарии:
1. Вопрос кроссплатформенный, мой ответ ниже зависит от платформы (потому что это то, к чему у меня есть легкий доступ). Похоже, что ответ имеет много общего с тем, как определяется SIG_DFL. Похоже, что исключением является FPE, который выглядит так, как будто по умолчанию для него установлено значение SIG_IGN.
Ответ №1:
Ответ зависит от платформы. Чтобы увидеть поведение каждого сигнала по умолчанию в вашей собственной системе, загрузите Signals::XSIG
модуль (вам не нужно его устанавливать) и запустите программу spike/analyze_default_signal_behavior.pl
(без аргументов). Или просто загрузите и запустите скрипт отсюда.
Обратите внимание, что некоторые сигналы не могут быть захвачены вашей программой, даже если вы установите %SIG
обработчик. Это также зависит от системы, но обычно включает по крайней мере SIGKILL
и SIGSTOP
.
Ответ №2:
Легче говорить о тех, которые не остановят вашу программу. На моей машине (RHEL) все, кроме FPE (исключение с плавающей запятой), CHLD (изменение статуса дочернего элемента), CONT (продолжить процесс), URG (срочное условие для сокета) и WINCH (изменение размера окна), приводит к остановке выполнения программы на Perl.
Четыре из сигналов не приводят к завершению программы, но временно останавливают выполнение программы: STOP (остановка, неблокируемая), TSTP (остановка терминала) и TTIN (фоновое чтение из tty), TTOU (фоновая запись в tty). Программа начнет выполняться снова, если получит ПРОДОЛЖЕНИЕ.
Ответ №3:
Из man kill
Debian,
Name Num Action Description
0 0 n/a exit code indicates if a signal may be sent
ALRM 14 exit
HUP 1 exit
INT 2 exit
KILL 9 exit cannot be blocked
PIPE 13 exit
POLL exit
PROF exit
TERM 15 exit
USR1 exit
USR2 exit
VTALRM exit
STKFLT exit might not be implemented
PWR ignore might exit on some systems
WINCH ignore
CHLD ignore
URG ignore
TSTP stop might interact with the shell
TTIN stop might interact with the shell
TTOU stop might interact with the shell
STOP stop cannot be blocked
CONT restart continue if stopped, otherwise ignore
ABRT 6 core
FPE 8 core
ILL 4 core
QUIT 3 core
SEGV 11 core
TRAP 5 core
SYS core might not be implemented
EMT core might not be implemented
BUS core core dump might fail
XCPU core core dump might fail
XFSZ core core dump might fail