sigalarm
sa.sa_sigaction = &sigalarm;
static void sigalarm(int);
if (signal(SIGALRM, sigalarm) == SIG_ERR)
sigalarm.sa_handler = sigalarm_handler;
sigemptyset(&sigalarm.sa_mask);
sigalarm.sa_flags = SA_RESETHAND; /* should only happen once */
sigalarm.sa_flags |= SA_RESTART;
if (sigaction(SIGALRM, &sigalarm, NULL) != 0) {
struct sigaction sigchild, sigalarm;