NAME

SigAction::SetCallBack - set several callbacks for any signal

Version 0.01

SYNOPSIS

Example:

#!/usr/bin/perl
use strict;
use warnings;

use SigAction::SetCallBack;

package Foo;

sub my_hup_callback {
    my ($class) = @_;
    print "$class: HUP signal recieved in my_hup_callback!\n";
}
SigAction::SetCallBack->sig_registry('HUP',\&my_hup_callback);


sub my_anoter_hup_callback {
    my ($class) = @_;
    print "$class: HUP signal recieved in my_anoter_hup_callback!\n";
}
SigAction::SetCallBack->sig_registry('HUP','my_anoter_hup_callback');

1; # ---------------

package Bar;

sub some_int_action {
    my ($class) = @_;
    print "$class: INT (Ctrl+C) signal recieved in some_int_action!\n";
}
SigAction::SetCallBack->sig_registry('INT',\&some_int_action);

1; # ---------------

package main; 

kill HUP => $$;
kill INT => $$;

exit;

# Output:
# Foo: HUP signal recieved in my_hup_callback!
# Foo: HUP signal recieved in my_anoter_hup_callback!
# Bar: INT (Ctrl+C) signal recieved in some_int_action!

DESCRIPTION

Sometimes there is a need to define several callbacks in different packages.

Generally, we override value the %SIG hash. And if definition different action for signal in (may be different) packages, will be called only the last callback.

SigAction::SetCallBack allows you to create the call stack. The order of packets, which define the callbacks will not be respected. On the other hand, will be complied with the procedure for determining the callbacks within the package, and all callbacks will work.

This package uses the POSIX.

METHODS

sig_registry($sig,$cb)

Register a callback stack storadge. sig_registry preserves the procedures order for registering callbacks within each package.

$sig - short name of the signal (ie, 'INT', 'HUP'). Do not use the full names of signals such as SIGINT, SIGHUP. Full list of signals, that supports your system, you can see by calling the command kill -l in shell.

$cb - is the name of a class method for a callback or a reference to it. The first argumets, who will receive the callback is the name of the class.

Returns true if successful.

set_sa_mask($new_sa_mask)

This method overrides the flag which can affect the behavior of the process in the processing of the signal. By default, this is 'SA_NODEFER'.

  • SA_NOMASK or SA_NODEFER - do not interfere with the signal at its processing.

  • SA_NOCLDSTOP - if signum is SIGCHLD, then a notice to stop the child process will not be received.

  • SA_ONESHOT or SA_RESETHAND - restore behavior of the signal after a one call handler.

  • SA_ONSTACK - call the signal handler stack additional signals provided by sigaltstack (2). If the additional stack is not available, then the stack will be used by default.

  • SA_RESTART - the behavior must conform to the semantics of BSD signals and allow some system calls work, while being processed signals.

  • SA_SIGINFO

Returns true if successful.

SEE ALSO

  • POSIX

AUTHOR

Ivan Sivirinov