Какие (необнаруженные) сигналы приведут к остановке выполнения программы на Perl?

#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