0

我正在用 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;
   }
 } 

我的问题是我不知道如何在程序的某些功能中释放资源。该函数的代码是否应该与主函数中所示的循环相同?程序如何对信号中断做出反应?它从当前函数返回到主函数,如果找到信号函数,它的处理程序会被调用吗?感谢您的任何建议,我真的很想了解这一点。

4

1 回答 1

0

哦,是的,共享内存等外部资源确实需要释放。

但是,从进程的角度来看,系统调用是原子的,因此从信号处理程序执行它们没有问题。只需调用外部资源析构函数然后退出。(不用担心调用 free(3)。)

于 2012-04-22T19:12:53.980 回答