我正在用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;
}
}
我的问题是我无法想象如何在程序的某些功能中释放资源。该函数的代码是否应该与主函数中显示的循环相同?程序如何对信号中断作出反应?它从当前函数返回到main,如果找到信号函数,它的处理程序被调用? 感谢您的任何建议,我真的很想了解这一点。
答案 0 :(得分:0)
哦,是的,需要释放共享内存等外部资源。
但是,从您的进程的角度来看,系统调用是原子的,因此从信号处理程序执行它们没有问题。只需调用外部资源析构函数然后退出。 (不要担心免费电话(3)。)