sigtrap
СОДЕРЖАНИЕ
ИМЯ
sigtrap - Perl-pragma для простого обработки сигналов
СИНТАКСИС
use sigtrap;
use sigtrap qw(stack-trace old-interface-signals); # equivalent
use sigtrap qw(BUS SEGV PIPE ABRT);
use sigtrap qw(die INT QUIT);
use sigtrap qw(die normal-signals);
use sigtrap qw(die untrapped normal-signals);
use sigtrap qw(die untrapped normal-signals
stack-trace any error-signals);
use sigtrap 'handler' => \&my_handler, 'normal-signals';
use sigtrap qw(handler my_handler normal-signals
stack-trace error-signals); ОПИСАНИЕ
Pragma sigtrap — это простой интерфейс для установки обработчиков сигналов. Вы можете использовать один из двух обработчиков, предоставляемых самим sigtrap (один, который предоставляет трассировку стека Perl, и один, который просто die()), или же вы можете предоставить собственный обработчик для установки. Можно указать, что обработчик должен быть установлен только для сигналов, которые либо не обрабатываются, либо игнорируются. Он имеет три списка сигналов для обработки, плюс вы можете предоставить свой собственный список сигналов.
Аргументы, передаваемые в оператор use, вызывающий sigtrap, обрабатываются в порядке следования. При встрече имени сигнала или имени одного из списков сигналов sigtrap обработчик устанавливается немедленно, а при встрече параметра он влияет на последующие обработчики.
ПАРАМЕТРЫ
ОБРАБОТЧИКИ СИГНАЛОВ
Эти параметры влияют на то, какой обработчик будет использоваться для последующих установленных сигналов.
- stack-trace
-
Обработчик, используемый для последующих установленных сигналов, выводит трассировку стека Perl в STDERR, а затем пытается выполнить дамп ядра. Это обработчик сигналов по умолчанию.
- die
-
Обработчик, используемый для последующих установленных сигналов, вызывает
die(на самом делеcroak) с сообщением, указывающим, какой сигнал был пойман. - handler your-handler
-
your-handler будет использоваться в качестве обработчика для последующих установленных сигналов. your-handler может быть любым значением, которое является допустимым для присваивания элементу
%SIG. См. perlvar для примеров функций-обработчиков.
СПИСКИ СИГНАЛОВ
sigtrap имеет несколько встроенных списков сигналов для обработки. Это:
- normal-signals
-
Это сигналы, которые программа обычно может ожидать встретить и которые по умолчанию приводят к ее завершению. Это HUP, INT, PIPE и TERM.
- error-signals
-
Эти сигналы обычно указывают на серьезную проблему с интерпретатором Perl или с вашим скриптом. Это ABRT, BUS, EMT, FPE, ILL, QUIT, SEGV, SYS и TRAP.
- old-interface-signals
-
Это сигналы, которые по умолчанию обрабатывались старым интерфейсом sigtrap, они — ABRT, BUS, EMT, FPE, ILL, PIPE, QUIT, SEGV, SYS, TERM и TRAP. Если sigtrap не получает сигналы или списки сигналов, используется этот список.
Для каждого из этих трех списков проверяется набор сигналов, которые должны обрабатываться, прежде чем они будут обработаны; если на вашей архитектуре определённый сигнал не реализован, он не будет обработан, а будет проигнорирован.
ДРУГОЕ
- untrapped
-
Этот токен сообщает sigtrap установить обработчики только для последующих перечисленных сигналов, которые не обрабатываются и не игнорируются.
- any
-
Этот токен сообщает sigtrap устанавливать обработчики для всех последующих перечисленных сигналов. Это поведение по умолчанию.
- signal
-
Любой аргумент, который выглядит как имя сигнала (то есть
/^[A-Z][A-Z0-9]*$/), указывает, что sigtrap должен установить обработчик для этого имени. - number
-
Требуется, чтобы использовалась хотя бы версия number sigtrap.
ПРИМЕРЫ
Предоставьте трассировку стека для старого списка сигналов:
use sigtrap; Аналогично:
use sigtrap qw(stack-trace old-interface-signals); Предоставьте трассировку стека только для 4 перечисленных сигналов:
use sigtrap qw(BUS SEGV PIPE ABRT); Выдать ошибку при INT или QUIT:
use sigtrap qw(die INT QUIT); Выдать ошибку при HUP, INT, PIPE или TERM:
use sigtrap qw(die normal-signals); Выдать ошибку при HUP, INT, PIPE или TERM, но не изменять поведение для сигналов, которые уже обрабатываются или игнорируются:
use sigtrap qw(die untrapped normal-signals); Выдать ошибку при получении одного из любых сигналов из normal-signals, которые в настоящее время untrapped, и вывести трассировку стека при получении любого из сигналов error-signals:
use sigtrap qw(die untrapped normal-signals
stack-trace any error-signals); Установить my_handler() в качестве обработчика для normal-signals:
use sigtrap 'handler', \&my_handler, 'normal-signals'; Установить my_handler() в качестве обработчика для normal-signals, вывести трассировку стека Perl при получении одного из error-signals:
use sigtrap qw(handler my_handler normal-signals
stack-trace error-signals);
© 1993–2023 Larry Wall and others
Licensed under the GNU General Public License version 1 or later, or the Artistic License.
The Perl logo is a trademark of the Perl Foundation.
https://perldoc.perl.org/5.38.0/sigtrap