Spec-Zone.ru › Perl 5.36

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API