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 обработчик устанавливается немедленно, при встрече параметра он влияет на последующие установленные обработчики.
ПАРАМЕТРЫ
ОБРАБОТЧИКИ СИГНАЛОВ
Эти параметры влияют на то, какой обработчик будет использоваться для последующих установленных сигналов.
- трассировка-стека
-
Обработчик, используемый для последующих установленных сигналов, выводит трассировку стека 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); Вызвать die при поступлении INT или QUIT:
use sigtrap qw(die INT QUIT); Вызвать die при поступлении HUP, INT, PIPE или TERM:
use sigtrap qw(die normal-signals); Вызвать die при поступлении HUP, INT, PIPE или TERM, но не изменять поведение для сигналов, которые уже перехвачены или игнорируются:
use sigtrap qw(die untrapped normal-signals); Вызвать die при поступлении одного из сигналов 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–2021 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.34.0/sigtrap