首页 > 解决方案 > 试图用 sigaction 调用处理程序捕获 SIGINT 但仍然杀死进程

问题描述

我正在尝试处理我正在编写的程序中的一些 C 信号,以添加一些安全网以防意外关闭等。我一直在尝试使用 sigaction 为 SIGINT 设置信号处理程序,我可以看到处理程序正在被调用,但它并没有阻止程序被杀死。

尝试将信号与 SIG_IGN 一起使用可以正常工作,但是使我无法使用自定义处理。我已经尝试将信号(...)与我的处理程序和 sigaction(...)一起使用,但实际上都没有工作。

void handler(int SIG) {
    //I know this is unsafe just for testing.
    printf("Handled signal %d!\n", SIG); 

    //No actual logic for now.
}

void initializer() {
    //...
    struct sigaction sa;

    sa.sa_handler = handler;
    sa.sa_flags = 0;
    sigemptyset(&sa.sa_mask);

    //This doesn't work.
    sigaction(SIGINT, &sa, NULL);

    //This also didn't work.
    // signal(SIGINT, handler);

    //...
}

我相信处理信号会默认停止它,我在网上看到的一切都表明这应该足够了,但我仍然收到:

^CHandled signal 2!

然后进程被杀死...

标签: csignals

解决方案


推荐阅读