我有两个链接到我的测试应用程序的共享库.这两个库都有信号处理程序SIGINT.
为同一信号设置多个信号处理程序是否有效?我生成SIGINT信号时处理程序将执行哪个顺序?
Sha*_*baz 20
正如其他人所说,只能设置一个信号处理程序,这是最后一个.然后,您必须自己管理调用两个函数.该sigaction函数可以返回先前安装的信号处理程序,您可以自己调用它.
像这样的东西(未经测试的代码):
/* other signal handlers */
static void (*lib1_sighandler)(int) = NULL;
static void (*lib2_sighandler)(int) = NULL;
static void aggregate_handler(int signum)
{
/* your own cleanup */
if (lib1_sighandler)
lib1_sighandler(signum);
if (lib2_sighandler)
lib2_sighandler(signum);
}
... (later in main)
struct sigaction sa;
struct sigaction old;
lib1_init(...);
/* retrieve lib1's sig handler */
sigaction(SIGINT, NULL, &old);
lib1_sighandler = old.sa_handler;
lib2_init(...);
/* retrieve lib2's sig handler */
sigaction(SIGINT, NULL, &old);
lib2_sighandler = old.sa_handler;
/* set our own sig handler */
memset(&sa, 0, sizeof(sa));
sa.sa_handler = aggregate_handler;
sigemptyset(&sa.sa_mask);
sigaction(SIGINT, &sa, NULL);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13287 次 |
| 最近记录: |