Spec-Zone.ru › Perl 5.34

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

Spec-Zone.ru

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