处理信号时分配内存的最佳方法是什么?

时间:2018-02-14 04:50:36

标签: c unix memory malloc signals

我知道malloc不是一个安全的函数,所以如果你在处理信号时给我一个正确的标准方法来分配内存,我会很高兴的。 例如,假设我想在链表中存储每个子进程终止的时间。如何在不使用信号处理程序内的malloc的情况下为链表创建新节点? 我对这个话题很新。

2 个答案:

答案 0 :(得分:2)

您无法在信号处理程序中分配内存;你必须在注册信号处理程序之前分配内存。在注册信号处理程序之前,您可能会分配一个结构数组来记录处理程序中的信息,但是您必须确保分配足够的信息!

答案 1 :(得分:2)

虽然没有直接回答你的问题,但正确的回答基本上是:不要。不要在信号处理程序中做任何事情。如果不需要,甚至不要安装信号处理程序。

对于有子进程的示例,您的SIGCHLD处理程序除了唤醒程序的另一部分(例如使用自管技巧)之外什么都不做,等待退出的子进程并记录其状态。更好的是,只需为您正在等待执行同步waitpid的每个子进程创建一个线程;那么就不需要全局状态或信号处理程序。