![终止进程是否意味着释放已使用的内存?](https://linux22.com/image/802567/%E7%BB%88%E6%AD%A2%E8%BF%9B%E7%A8%8B%E6%98%AF%E5%90%A6%E6%84%8F%E5%91%B3%E7%9D%80%E9%87%8A%E6%94%BE%E5%B7%B2%E4%BD%BF%E7%94%A8%E7%9A%84%E5%86%85%E5%AD%98%EF%BC%9F.png)
我有这样的服务,每秒运行一次外部 exe 程序(例如 process1.exe)并终止它们。Taskmgr - 仅显示一个进程。运行服务后,我获得的可用内存很少。所有进程内存的总和和总使用内存不相等。当我运行 RamMap 进程时,我看到很多扩展的 procces1.exe。看来终止进程并不意味着释放内存。
您能建议 Windows 软件进行死进程内存泄漏检测吗?
答案1
现代操作系统除非有其他选择,否则不会释放内存。参见这个答案了解更多详情。如果页面是脏的、共享的或在文件系统中有名称,则仍然可以访问该页面,因此无需将其释放。只有当页面既非共享又匿名时,才会将其释放。
答案2
如果您终止进程,内存可能仍被终止的进程占用,但如果另一个正在运行的程序/服务需要它,它将被释放。您可以使用一些软件自动释放您的 RAM,但只能认为它正在尝试使用尽可能多的内存,因此操作系统将释放它。
答案3
看来您的服务在终止外部程序后不会关闭句柄。另一个可能的问题是驱动程序存在缺陷。另请参阅:RamMap 显示任务管理器未显示的数百万个进程(的答案)。