单信号处理函数有多个信号的正确方法是什么?
Linux上用C语言建立一个能处理多个具有相同功能的POSIX信号的程序的最佳方式是什么?单信号处理函数有多个信号的正确方法是什么?
举例来说,在我的代码我有一个处理函数,我想一般电话时永远的信号被捕获执行一些动作:
/* Exit handler function called by sigaction */
void exitHandler(int sig, siginfo_t *siginfo, void *ignore)
{
printf("*** Got %d signal from %d\n", siginfo->si_signo, siginfo->si_pid);
loopCounter=0;
return;
}
我已经建立了两个信号具有独立的sigaction赶上要求每个信号:
/* Set exit handler function for SIGUSR1 , SIGINT (ctrl+c) */
struct sigaction act;
act.sa_flags = SA_SIGINFO;
act.sa_sigaction = exitHandler;
sigaction(SIGUSR1, &act, 0);
sigaction(SIGINT, &act, 0);
这是设置此类型处理的正确方法吗?有没有其他方法可以让我不必列举所有可能的信号编号?
我看不出你如何能直截了当地设置一个处理程序所有信号。但是,您可以关闭使用sigfillset()
以生成一个包含所有有效信号的数字一组,然后用sigismember()
,以确定号码是否是集合了可能的信号数字迭代,并设置一个处理程序,如果因此得到相当。好的,我看不到确定最大可能信号数量的方法,因此您可能需要猜测合适的最大值。
“正负号”“的sigaction”系统调用的参数是一个整数值,它不作为一个标志工作。
据我所知,有没有办法在一个呼叫分配一个处理函数的几个信号。
谢谢你明确的答复。 – ammianus 2010-10-25 19:58:51
这是正确的方式来建立这种类型的处理?
不太 - it's not safe to use printf()
inside a signal handler,但你仍然可以使用write()
到stdout
或stderr
。
谢谢,这是一个好主意。我想我可以继续列举我想要捕捉的信号,因为我对C很陌生,如果我错过了某些东西,我很好奇。 – ammianus 2010-10-25 19:58:24