正如其他人所说,只能设置一个信号处理程序,这是最后一个。然后,您将不得不自己管理调用两个函数。该
sigaction函数可以返回以前安装的信号处理程序,您可以自己调用该信号处理程序。
这样的东西(未经测试的代码):
static void (*lib1_sighandler)(int) = NULL;static void (*lib2_sighandler)(int) = NULL;static void aggregate_handler(int signum){ if (lib1_sighandler) lib1_sighandler(signum); if (lib2_sighandler) lib2_sighandler(signum);}... (later in main)struct sigaction sa;struct sigaction old;lib1_init(...);sigaction(SIGINT, NULL, &old);lib1_sighandler = old.sa_handler;lib2_init(...);sigaction(SIGINT, NULL, &old);lib2_sighandler = old.sa_handler;memset(&sa, 0, sizeof(sa));sa.sa_handler = aggregate_handler;sigemptyset(&sa.sa_mask);sigaction(SIGINT, &sa, NULL);


