当我在程序中捕获SIGINT信号时,如何安全地清理资源?
在信号处理函数中,无法调用delete
运算符,因为我不知道如何释放使用new
运算符创建的资源。
有什么想法吗?
答案 0 :(得分:1)
如果您的应用程序正在关闭,请不要担心内存。无论如何,一旦你终止,操作系统就会把它扔掉。
你需要在信号处理程序中清理的东西是比你的进程更长的东西 - 例如,如果你创建的子进程也需要退出,你应该告诉它这样做。
答案 1 :(得分:1)
通常,您不希望在信号处理程序中做很多事情,除非设置一个布尔标志,该标志将由程序的其他部分作出反应,通常会导致某些循环失败并允许熟悉的方法在不涉及信号的情况下有序关闭。使用此标志协调关闭的原因是某些库函数避免了在异步信号处理期间安全重新进入所需的妥协。甚至一些使用特定于线程的内存的线程安全函数也可能无法处理异步重新进入。快速搜索在http://book.chinaunix.net/special/ebook/addisonWesley/APUE2/0201433079/ch10lev1sec6.html#ch10lev1sec6找到了一些关于安全功能的讨论。