SoFunction
Updated on 2025-04-07

A brief summary of Perl signal processing learning

Common processing signals under Unix

Copy the codeThe code is as follows:

No    Name         Default Action       Description
 1     SIGHUP       terminate process    terminal line hangup
 2     SIGINT       terminate process    interrupt program
 3     SIGQUIT      create core image    quit program
 4     SIGILL       create core image    illegal instruction
 5     SIGTRAP      create core image    trace trap
 6     SIGABRT      create core image    abort program (formerly SIGIOT)
 7     SIGEMT       create core image    emulate instruction executed
 8     SIGFPE       create core image    floating-point exception
 9     SIGKILL      terminate process    kill program
 10    SIGBUS       create core image    bus error
 11    SIGSEGV      create core image    segmentation violation
 12    SIGSYS       create core image    non-existent system call invoked
 13    SIGPIPE      terminate process    write on a pipe with no reader
 14    SIGALRM      terminate process    real-time timer expired
 15    SIGTERM      terminate process    software termination signal
 16    SIGURG       discard signal       urgent condition present on socket
 17    SIGSTOP      stop process         stop (cannot be caught or ignored)
 18    SIGTSTP      stop process         stop signal generated from keyboard
 19    SIGCONT      discard signal       continue after stop
 20    SIGCHLD      discard signal       child status has changed
 21    SIGTTIN      stop process         background read attempted from control terminal
 22    SIGTTOU      stop process         background write attempted to control terminal
 23    SIGIO        discard signal       I/O is possible on a descriptor (see fcntl(2))
 24    SIGXCPU      terminate process    cpu time limit exceeded (see setrlimit(2))
 25    SIGXFSZ      terminate process    file size limit exceeded (see setrlimit(2))
 26    SIGVTALRM    terminate process    virtual time alarm (see setitimer(2))
 27    SIGPROF      terminate process    profiling timer alarm (see setitimer(2))
 28    SIGWINCH     discard signal       Window size change
 29    SIGINFO      discard signal       status request from keyboard
 30    SIGUSR1      terminate process    User defined signal 1
 31    SIGUSR2      terminate process    User defined signal 2

Perl's signal processing principle

Perl provides the special default HASH %SIG. The call needs to be used to retain the global HASH array %SIG in the system. Even if the signal is intercepted with '$SIG{signal name}', it is equivalent to when this signal appears in the perl program, we will execute the address value of a certain piece of code (subfunction) (defining the signal response function). This code is the result of the execution after intercepting this information.

Take a SIGALRM example, that is, timeout processing:

Copy the codeThe code is as follows:

my $timeout = 10 ;
    eval {
        local $SIG{ALRM} = sub { die "alarm\n" }; # \n required
alarm $timeout; #If the $timeout time is reached, the above sub will be executed
        sleep 15;
        print " if timeout ,this will not print";
alarm 0; #Restore to default state
    };
    if ($@) {
die  unless $@ eq "alarm\n";   #It may not be a timeout, but other errors, just die
        print "timeout \n" ;
    }
    else {
        print "not timeout";
    }

Here I want to talk about the error capture mechanism of perl

Copy the codeThe code is as follows:

eval {
open(FH,””) or die “Can't open files,$!”;
};

Catch exceptions
Copy the codeThe code is as follows:

if($@){#Exception appears}
else{#No exceptions, print file contents
while(){

}
close FH;
}

If the program in the eval block has syntax errors, runtime errors, or encounters die statements, eval will return undef. The error code is saved in $@.