C 对于多个信号,使用单个信号处理器函数的正确方法是什么?

C 对于多个信号,使用单个信号处理器函数的正确方法是什么?,c,posix,signals,C,Posix,Signals,在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", sigin

在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 );
这是设置这种处理方式的正确方法吗?是否有其他方法不必枚举所有可能的信号号?

系统调用“sigaction”的“signum”参数是一个整数值,不能用作标志


据我所知,无法在一次调用中为多个信号分配一个处理函数。

我看不出如何直接为所有信号设置一个处理函数。但是,您可以通过使用生成一个包含所有有效信号号的集合,然后使用迭代可能的信号号来确定该数字是否在集合中,如果在集合中,则设置一个处理程序。好的,我看不到一种确定最大可能信号数的方法,所以你可能不得不猜测一个合适的最大值

这是设置这种处理方式的正确方法吗


不完全是-,但您仍然可以使用
write()
stdout
stderr

谢谢,这是个好主意。我想我可以继续列举我想要捕捉的信号,因为我是C语言的新手,我很好奇我是否遗漏了什么。