释放信号处理程序内的内存

Mik*_*ike 5 c linux signals signal-handling

我正在编写一个使用套接字的API.在API中,我为各种项目分配内存.我想确保关闭套接字并释放内存以防有诸如Ctrl-C之类的信号.在研究这个时,似乎free()不在安全功能列表(man 7信号)上,因此,我无法释放信号处理程序内的内存.我可以关闭套接字就好了.有没有想过如何释放记忆?提前谢谢您的时间.

jam*_*san 6

或者,不要捕获信号,只是让操作系统处理清理工作,无论如何都要在进程清理过程中进行清理.您没有发布任何与流程无直接关系的资源,因此无需手动释放它们.


Edw*_*uck 5

一种技术(也存在其他技术):

  1. 让您的程序运行一个主处理循环。
  2. 让您的主处理循环检查一个标志,看看它是否应该“继续运行”。
  3. 让您的信号处理程序简单地将“保持运行”标志设置为 false,但不以其他方式终止程序。
  4. 在退出之前让您的主处理循环进行内存清理。

这样做的好处是将分配和解除分配都放在以已知序列调用的代码块中。在处理相互关联的对象网络时,这样做可能是天赐之物,并且在试图弄乱同一个对象的两个处理流程之间不会出现竞争条件。