我正在寻找不同的方法来暂停和恢复程序通过其在Windows XP下的进程ID的特定进程。如何在Windows下暂停/恢复任何外部进程?
Process suspend/resume tool与SuspendThread
/ResumeThread
这样做,但会警告多线程程序和死锁问题。
PsSuspend看起来不错,但我不知道它是否有什么特别的死锁或使用其他方法?
首选语言:C++/Python的
我正在寻找不同的方法来暂停和恢复程序通过其在Windows XP下的进程ID的特定进程。如何在Windows下暂停/恢复任何外部进程?
Process suspend/resume tool与SuspendThread
/ResumeThread
这样做,但会警告多线程程序和死锁问题。
PsSuspend看起来不错,但我不知道它是否有什么特别的死锁或使用其他方法?
首选语言:C++/Python的
我觉得这是一个很好的理由有Windows无SuspendProcess()函数。具有这样的功能为不稳定的系统打开了大门。除非您自己创建了该流程,否则您不应暂停流程。 如果您自己编写该过程,则可以使用事件(请参阅MSDN中的SetEvent()等)或其他类型的消息传递以在过程中触发暂停命令。
如果“调试调试器”(例如,使用logger.exe
以跟踪windbg.exe
进行的所有API调用),看来调试器使用SuspendThread()
/ResumeThread()
暂停所有在进程中的线程的正在调试。
PsSuspend可能会使用一种不同的方式挂起进程(我不确定),但仍然可以挂起其他进程:如果您挂起的进程持有另一进程所需的共享同步对象,你可能阻止其他进程取得进展。如果两个程序都写得很好,当你恢复暂停的程序时,它们应该恢复,但并不是所有的程序都写得很好。如果这会导致正在执行挂起的程序挂起,那么就会出现死锁。
如果你小心使用它,那么它工作正常。如果你使用它来创建死锁,那么你创建了一个死锁。 – 2008-11-20 08:00:27
我不确定这是否能完成这项工作,但使用MS Systernals的ProcessExplorer可以暂停一个进程。
有人说这里:https://superuser.com/a/155263,我也发现它。
阅读here,你也有psutil的蟒蛇,你可以使用它像:
>>> import psutil
>>> pid = 7012
>>> p = psutil.Process(pid)
>>> p.suspend()
>>> p.resume()
SEO的评论如下:PsSuspend看起来像一个窗口当量的Linux/UNIX的`杀-SIGSTOP`或`杀-SIGCONT“(甚至是”killall“)。 – 2010-10-21 21:30:28