如何在Windows下暂停/恢复任何外部进程?

我正在寻找不同的方法来暂停和恢复程序在Windows XP下通过它的进程ID的特定进程。

进程暂停/恢复工具通过SuspendThread / ResumeThread但会警告multithreading程序和死锁问题。

PsSuspend看起来没问题,但我想知道它是否有什么特别的死锁或使用其他方法?

首选语言:C ++ / Python

Solutions Collecting From Web of "如何在Windows下暂停/恢复任何外部进程?"

如果您“调试调试器”(例如,使用logger.exe跟踪由windbg.exe所做的所有API调用),看起来调试器使用SuspendThread() / ResumeThread()挂起进程中的所有线程调试。

PsSuspend可能会使用一种不同的挂起进程的方式(我不确定),但是仍然可以挂起其他进程:如果挂起的进程持有另一个进程所需的共享同步对象,则可能会阻塞从其他进程中取得进展。 如果两个程序都写得很好,当你恢复被暂停的程序时,它们应该恢复,但并不是所有的程序都写得很好。 如果这导致你正在执行挂起的程序挂起,那么你有一个死锁。

我不确定这是否能完成这项工作,但是使用MS Systernals的ProcessExplorer,您可以暂停进程。

有人说: https : //superuser.com/a/155263 ,我也在那里找到了。

在这里阅读,你也有python的psutil,你可以像这样使用它:

 >>> import psutil >>> pid = 7012 >>> p = psutil.Process(pid) >>> p.suspend() >>> p.resume() 

我在几个软件上测试了http://www.codeproject.com/KB/threads/pausep.aspx

它工作正常。

PsSuspend和Pausep是两个有效的选项。

我认为有一个很好的理由,为什么在Windows中没有SuspendProcess()函数。 具有这样的功能打开了一个不稳定的系统的大门。 除非你自己创建了这个过程,否则你不应该暂停一个过程。 如果你自己编写这个过程,你可以使用一个事件(参见MSDN中的SetEvent()等)或其他类型的消息来触发进程中的暂停命令。