cmyker has asked for the wisdom of the Perl Monks concerning the following question:
#!/usr/bin/perl use strict; use POSIX; my $sigset = POSIX::SigSet->new(&POSIX::SIGUSR1); my $action = POSIX::SigAction->new(\&trap, $sigset, &POSIX::SA_SIGINFO +); POSIX::sigaction(&POSIX::SIGUSR1, $action); #$SIG{USR1} = \&trap; #or install handler like this or "use sigtrap" w +hatever sub trap { print "got signal.\n"; } print "My pid is: $$\n"; while(sleep(1)) { }
C version works without any problems:$ perl test.pl My pid is: 3188 $ kill -SIGUSR1 3188 got signal. $ kill -SIGUSR1 3188 got signal. ---> script is terminated
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <signal.h> void usr1handler(int signal); int main(void) { signal(SIGUSR1, usr1handler); printf("My pid is: %d\n", getpid()); for(;;) { sleep(1); } return 0; } void usr1handler(int signal) { printf("Got a signal: %d\n", signal); }
I'm using perl version v5.12.1 under Linux 2.6.34-12. Any suggestions is much appreciated.$ ./test My pid is: 3188 $ kill -SIGUSR1 3318 Got a signal called: 10 $ kill -SIGUSR1 3318 Got a signal called: 10 $ kill -SIGUSR1 3318 Got a signal called: 10 $ kill -SIGUSR1 3318 Got a signal called: 10 ... it never exits
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: How to prevent Perl from exit when SIGUSR1 recieved?
by repellent (Priest) on Aug 21, 2010 at 01:12 UTC | |
|
Re: How to prevent Perl from exit when SIGUSR1 recieved?
by jethro (Monsignor) on Aug 20, 2010 at 23:44 UTC | |
|
Re: How to prevent Perl from exit when SIGUSR1 recieved?
by okram (Monk) on Aug 23, 2010 at 12:09 UTC |