sigtrap
СОДЕРЖАНИЕ
ИМЯ
sigtrap - Perl-прагма для включения простой обработки сигналов
СИНТАКСИС
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); ОПИСАНИЕ
Прагма 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.
ПРИМЕРЫ
Предоставление трассировки стека для old-interface-signals:
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–2020 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.28.3/sigtrap