每当我正在处理其他任务并需要让 CPU/GPU 处理该任务时,我都会使用 PsSuspend 通过 PID 暂停占用过多 CPU 或 GPU 计算资源的进程。但是,这些被暂停的进程的内存会留在 RAM(或 GPU 的 VRAM)中。
有没有办法将挂起程序的内存内容写入磁盘,然后释放操作系统的内存,这样当进程恢复时,它会从磁盘读回内存并继续正常运行?我对系统内存 (RAM) 和视频内存 (VRAM) 都感兴趣。我不认为这可以通过 PsSuspend 来实现,但我怀疑使用 Windows API 和 C++ 可以实现。如果这不可能,你能解释一下为什么吗?
答案1
从https://stackoverflow.com/questions/49756405/do-suspended-processes-still-use-up-cpu-ram
挂起的 Win32 进程不会释放任何内存,但在物理 RAM 很少的系统中,可以将应用程序的部分内容从 RAM 移至页面文件,以释放 RAM 供其他活动应用程序使用。可以调用 SetProcessWorkingSetSize 来强制减少进程工作集中的页面。
也许您可以改用 docker 容器或 VM,这样您就可以暂停整个工作流程并释放所有使用的资源。