【发布时间】:2012-05-03 12:10:48
【问题描述】:
我正在用 C 语言编写一个程序,并且正在创建几个使用 POSIX 共享内存的子进程。 现在我正在尝试处理程序被 SIGINT 等信号中断的情况。 我知道,我需要安装信号功能,由于代码不一致,直接在信号处理程序中释放资源并不好,因此只需切换布尔标志即可。 同时我的主要代码是循环直到标志被切换。
所以它是这样的:
bool signal_interrupt = false;
void sig_handler(int sig_num)
{
signal_interrupt = true;
}
int main(void)
{
while (!signal_interrupt)
{
/* code, arguments processing, functions calling...*/
signal_interrupt = true;
}
}
我的问题是我不知道如何在程序的某些功能中释放资源。函数的代码是否应该与主函数中所示的循环相同?程序如何对信号中断做出反应?它从当前函数返回到主函数,如果找到信号函数,它的处理程序会被调用吗? 感谢您的任何建议,我真的很想了解这一点。
【问题讨论】:
-
当你的程序接收到信号时,它会取消当前的系统调用并调用信号处理程序。在您的信号处理程序完成后,您的程序将在被中断的系统调用之后返回到下一个系统调用。
标签: c signals shared-memory