当进程被例如任务管理器杀死时,如何释放资源?有没有办法在进程关闭之前调用函数?
如果你的进程被杀,你真的无能为力.根据定义,杀死一个进程只是 - 杀死它.该过程没有机会运行任何代码.这非常"按设计".
想象一下,您可以注册在您的进程被用户(或其他进程)杀死时调用的例程.它会做什么?您流程中的所有其他线程都处于不确定状态,您将如何与它们同步?请记住,这个想法是需要杀死这个过程.
另一种情况甚至更加困难:你的代码是良性的,并且正在努力做正确的事情 - 例如清理并成为一名优秀的系统公民.有些代码不是.想象一下,如果操作系统允许为正在被杀死的进程运行代码,那将对恶意软件作者带来什么好处.对于使用标准用户权限运行的恶意进程而言,这对于任何具有管理权限的运行来说都是非常糟糕的.
关键的最终结构和结构化异常处理不能解决这个基本问题.
从好的方面来说,操作系统将释放它在处理过程中所知道的所有资源,即内存和内核对象.那些不会泄漏.但是资源管理器并不了解您的流程,因此无法清理它.
解决此问题的一种方法是建立一个监控流程来跟踪您的其他流程状态并清理它.您可以通过简单的流程或服务来完成此操作.你也可以考虑某种shell扩展,它有自己的线程做同样的事情.