我想捕捉一个信号,设置信号被捕获的全局说法,然后返回到我的主循环后。这是我的代码。
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。
答案 0 :(得分:3)
在调用信号处理程序后,您无需执行任何特殊操作即可恢复执行。
您的问题可能是信号中断了main
中的某个阻止系统调用,这会导致它在errno
设置为EINTR
时返回错误。如果您没有特别检查并重新启动系统调用,那么可能只是遇到导致您的进程退出的一般错误情况。