2008-09-19 95 views
8

我正在寻找不同的方法来暂停和恢复程序通过其在Windows XP下的进程ID的特定进程。如何在Windows下暂停/恢复任何外部进程?

Process suspend/resume toolSuspendThread/ResumeThread这样做,但会警告多线程程序和死锁问题。

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

首选语言:C++/Python的

+2

SEO的评论如下:PsSuspend看起来像一个窗口当量的Linux/UNIX的`杀-SIGSTOP`或`杀-SIGCONT“(甚至是”killall“)。 – 2010-10-21 21:30:28

回答

0

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

5

如果“调试调试器”(例如,使用logger.exe以跟踪windbg.exe进行的所有API调用),看来调试器使用SuspendThread()/ResumeThread()暂停所有在进程中的线程的正在调试。

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

2

阅读here,你也有psutil的蟒蛇,你可以使用它像:

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