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–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.36.0/sigtrap