#!/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" whatever sub trap { print "got signal.\n"; } print "My pid is: $$\n"; while(sleep(1)) { } #### $ perl test.pl My pid is: 3188 $ kill -SIGUSR1 3188 got signal. $ kill -SIGUSR1 3188 got signal. ---> script is terminated #### #include #include #include #include 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); } #### $ ./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