如何在Windows下暂停和恢复任何外部进程?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Windows下暂停和恢复任何外部进程?相关的知识,希望对你有一定的参考价值。
我正在寻找不同的方法来通过Windows XP下的进程ID以程序方式暂停和恢复某个特定进程。
进程暂停恢复工具 做到 SuspendThread
ResumeThread
但对多线程程序和死锁问题发出警告。
PsSuspend 看起来还不错,但我不知道它是否对死锁有什么特别的作用,或者使用其他方法?
首选语言 : C++ Python
如果你 "调试调试器"(例如,使用 logger.exe
来跟踪所有由 windbg.exe
),看来调试器使用的是 SuspendThread()
ResumeThread()
来暂停正在调试的进程中的所有线程。
PsSuspend可能会使用不同的方式来暂停进程(我不确定),但它仍然有可能挂起其他进程:如果你暂停的进程持有另一个进程所需要的共享同步对象,你可能会阻止另一个进程取得任何进展。如果两个程序都写得很好,当你恢复被暂停的那个程序时,它们应该会恢复,但不是所有的程序都写得很好。如果这导致你的程序暂停,那么你就有一个死锁。
我不知道这样做是否有效果,但是用MS Systernals的ProcessExplorer,你可以暂停一个进程。
这里已经说过了。https: /superuser.coma155263 我也是在那里找到的。
阅读 此处 你也有psutil的python,你可以使用它这样的。
>>> import psutil
>>> pid = 7012
>>> p = psutil.Process(pid)
>>> p.suspend()
>>> p.resume()
我测试过 http:/www.codeproject.comKBthreadspausep.aspx 在一些软件上。
运作良好。
PsSuspend和Pausep是两个有效的选项。
所以,当我发现 暂停按钮, Googling for this ("windows SIGSTOP"), get this question as the first search result (thanks Ilia K.) 您的评论 做了它的工作),看了答案,我又去查了一下代码。
显然它使用了未被记录的NT内核和Win32 APIs。_NtSuspendProcess
, _NtResumeProcess
和 _HungWindowFromGhostWindow
.
PsSuspend,你提到的并链接到的实用程序可能使用了这些API,我无法验证这一点,源代码没有提供,只有可执行文件和EULA,你大概可以通过拆解二进制文件来弄清楚,但这是违反EULA的。
所以,为了回答你的具体问题,请查看 暂停按钮的主。cpp, 基本上 你所谓 _NtSuspendProcess(ProcessHandle)
和 _NtResumeProcess(ProcessHandle)
, ProcessHandle
是要暂停或恢复的进程的句柄。
我认为Windows中没有SuspendProcess()函数是有原因的。有了这样一个函数,就会为一个不稳定的系统打开大门。你不得暂停一个进程,除非你自己创建了那个进程.如果你自己写了那个进程,你可以使用一个事件(参见MSDN中的::SetEvent()等)或其他种类的消息来触发进程中的暂停命令。
以上是关于如何在Windows下暂停和恢复任何外部进程?的主要内容,如果未能解决你的问题,请参考以下文章
在windows / c ++上使用多进程应用程序进行高精度定时操作