www.nico.schottelius.org/software/cinit/browse_source/cinit-0.0.4/generic/set_signals.c

46 lines
1.2 KiB
C

/*
* (c) 2005 Nico Schottelius (nico-linux at schottelius.org)
* cinit.c
* part of cLinux/cinit
*/
#include <signal.h>
#include <stdio.h>
#include "cinit.h"
void set_signals(int action)
{
struct sigaction sa;
if(action == ACT_SERV) {
sa.sa_handler=SIG_IGN;
} else {
sa.sa_handler=SIG_DFL;
}
sigaction(SIGINT,&sa,NULL); /* ignore ctr+c */
sigaction(SIGPIPE,&sa,NULL); /* what todo when pipe/fifo closed */
sigaction(SIGCHLD,&sa,NULL); /* what todo when child exited */
sigaction(SIGUSR2,&sa,NULL); /* USR2 */
sigaction(SIGQUIT,&sa,NULL); /* QUIT... */
sigaction(SIGTTIN,&sa,NULL);
sigaction(SIGTTOU,&sa,NULL);
/* sigio is called to act on the socket */
if(action == ACT_SERV) {
sa.sa_handler=sigio;
}
sigaction(SIGIO,&sa,NULL);
/* signal handlers to do special things with: reboot */
if(action == ACT_SERV) {
sa.sa_handler=sig_reboot;
}
// sigaction(SIGINT,&sa,NULL); /* FIXME: Testing only: ctr+c = REBOOT!!! */
sigaction(SIGUSR1,&sa,NULL);
sigaction(SIGTERM,&sa,NULL);
sigaction(SIGHUP,&sa,NULL);
/* sigstop can't be ignored, do the manpages say */
/* sigaction(SIGSTOP,&sa,NULL); */
}