0

我想捕获一个信号,设置一个全局说明信号被捕获,然后返回我的主循环后记。这是我的代码。

int main(int mainargc, char **mainargv)
{
.
.
.
    sig_handler.sa_handler = sigint_handler;
    sigemptyset(&sig_handler.sa_mask);
    sig_handler.sa_flags = 0;
    sigaction(SIGINT, &sig_handler, NULL);
.
.
. 
    while(1)
    {
    //main loop
    }
}

void sigint_handler(int signal)
{
    int saved_error = errno;

    g_sigint_happened = 1;

    //TODO -- send sigint to children

    errno = saved_error;

}

我的问题是我的信号处理程序被调用但我的程序仍在终止。我不确定如何告诉信号处理程序返回 main。

4

1 回答 1

3

在调用信号处理程序后,您无需执行任何特殊操作即可恢复执行。

您的问题可能是信号中断了一些阻塞系统调用main,这将导致它返回errno设置为的错误EINTR。如果您没有专门检查并重新启动系统调用,那么它可能只是经历了一个导致您的进程退出的一般错误情况。

于 2012-11-26T01:35:20.553 回答