Spec-Zone.ru › Perl 5.30

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);

ОПИСАНИЕ

Предикат 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

Требуется, чтобы использовалась версия sigtrap не ниже number.

ПРИМЕРЫ

Предоставить отладочную информацию о сигналах 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.30.3/sigtrap

Spec-Zone.ru

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