braohaufngec
braohaufngec

Reputation: 31

How to catch signal in Perl and don't stop process

I am trying to catch signal , SIGUSR2 in my case , I am creating subroutine to handle signal using next code

$SIG{USR2} =\&handle_usr2;

sub handle_usr2 {
 open HELLO, ">hello" or die "die" ;
print HELLO "SAYHELLO";
        close HELLO;
}

In this example I am catching signal and print some text to file. In this example signal really enters handle subroutine , it writes to file BUT after that process is killed. So it kills process anyway what signal I am trapping. BUT intresting thing is that if to set handler to 'IGNORE'

$SIG{USR2} = 'IGNORE';

it really ignores signal and doesn't kill process, how can I handle signal and don't kill process.

Upvotes: 1

Views: 971

Answers (1)

Sobrique
Sobrique

Reputation: 53508

What does the rest of you code look like?

Because that should work fine, with one caveat (well two - you do potentially issue a 'die' within your handler). Kill will interrupt certain system calls, like 'sleep', and your code will jump past it.

IGNORE works a little differently - your code will discard the signal without processing it.

Upvotes: 2

Related Questions