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

时间:2008-09-19 08:26:17

标签: windows process process-management

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

Process suspend/resume tool使用SuspendThread / ResumeThread执行此操作,但警告多线程程序和死锁问题。

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

首选语言:C ++ / Python

6 个答案:

答案 0 :(得分:5)

如果您“调试调试器”(例如,使用logger.exe跟踪windbg.exe所做的所有API调用),则调试器似乎使用SuspendThread() / {{1}暂停正在调试的进程中的所有线程。

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

答案 1 :(得分:3)

我不确定这是否能完成这项工作,但是使用MS Sysinternals的Process Explorer,您可以暂停流程。

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

答案 2 :(得分:2)

阅读here你也有pyu的psutil你可以这样使用它:

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

答案 3 :(得分:1)

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

它工作正常。

PsSuspend和Pausep是两个有效选项。

答案 4 :(得分:1)

因此,在我找到关于UniversalPauseButton的信息之后,请对此进行谷歌搜索(“ windows SIGSTOP”),将这个问题作为第一个搜索结果(感谢Ilia K. your comment做好了工作),然后阅读答案,我回去签出代码。

Apparently,它使用未公开的NT内核和Win32 API _NtSuspendProcess_NtResumeProcess_HungWindowFromGhostWindow

PsSuspend,您提到并链接到的实用程序可能使用了这些API,我无法验证这一点,没有提供源代码,仅提供了可执行文件和EULA,您可以通过反汇编二进制文件来解决这一问题,但是反对EULA。

因此,要回答您的特定问题,请结帐UniversalPauseButton的主要内容。 cpp basically您致电_NtSuspendProcess(ProcessHandle)_NtResumeProcess(ProcessHandle),{ {1}}是您要暂停或继续的过程的句柄。

答案 5 :(得分:0)

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