#!/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
In reply to How to prevent Perl from exit when SIGUSR1 recieved? by cmyker
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |