blob: ff2821efcdd87930b1bfb360274ee0c36063bc63 [file] [log] [blame]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
static sig_atomic_t counter = 0;
static void sig_handler(int signum)
{
static char msg[] = "Signal handler\n";
(void)signum;
write(1, msg, sizeof msg - 1);
counter++;
}
int main(int argc, char *argv[])
{
struct sigaction act, oact;
pid_t f;
(void)argc;
memset(&act, 0x00, sizeof(struct sigaction));
act.sa_handler = sig_handler;
sigemptyset(&act.sa_mask);
act.sa_flags = SA_RESTART;
/* oact is there for the benefit of strace() */
sigaction(SIGINT, &act, &oact);
sigaction(SIGTERM, &act, &oact);
f = fork();
if ( f < 0 ) {
perror(argv[0]);
exit(255);
} else if ( f > 0 ) {
sleep(5);
if ( !counter ) {
fprintf(stderr, "No signal received!\n");
exit(1);
}
exit(0);
} else {
sleep(1);
kill(getppid(), SIGINT);
exit(0);
}
}