如何在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 服务器暂停我的进程

在windows / c ++上使用多进程应用程序进行高精度定时操作

C++ 暂停外部程序

如何在 Visual Basic 中暂停 System.Timer?

类似于我的代码的音乐命令的暂停/恢复?

在 Windows 上的 Python Popen 子进程中暂停 FFmpeg 编码