Linux上用于设置可以处理具有相同功能的多个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;
}
Run Code Online (Sandbox Code Playgroud)
我通过对每个信号进行单独的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 );
Run Code Online (Sandbox Code Playgroud)
这是设置此类处理的正确方法吗?有没有其他方法我不必枚举所有可能的信号数字?
我不明白如何直接为所有信号设置单个处理程序。但是,您可以通过使用生成一个包含所有有效信号编号的集合,然后使用迭代可能的信号编号来确定该编号是否在该集合中,如果是,则设置一个处理程序,从而非常接近。好的,我看不到确定最大可能信号数的方法,因此您可能必须猜测合适的最大值。sigfillset()sigismember()