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