如何在Windows下暂停/恢复任何外部进程?
时间:2020-03-06 14:25:10 来源:igfitidea点击:
我正在寻找通过Windows XP下通过其进程ID来以编程方式暂停和恢复特定进程的不同方法。
进程挂起/恢复工具使用SuspendThread / ResumeThread来执行此操作,但是会警告多线程程序和死锁问题。
PsSuspend看起来还可以,但是我想知道它是否对死锁有什么特别的作用还是使用其他方法?
首选语言:C ++ / Python
解决方案
我认为在Windows中没有SuspendProcess()函数是有充分的理由的。具有这样的功能为不稳定的系统打开了大门。除非我们自己创建了该过程,否则不得暂停该过程。
如果我们自己编写了该过程,则可以使用事件(请参见MSDN中的:: SetEvent()等)或者另一种消息传递来触发过程中的暂停命令。
如果我们"调试调试器"(例如,使用" logger.exe"跟踪" windbg.exe"进行的所有API调用),则似乎调试器使用" SuspendThread()/ ResumeThread()"暂停正在调试的进程中的所有线程。
PsSuspend可能使用不同的方式挂起进程(我不确定),但是仍然可以挂起其他进程:如果我们要挂起的进程持有另一个进程所需的共享同步对象,则可能会阻塞取得任何进展的其他过程。如果两个程序的编写都正确,则当我们恢复已暂停的程序时,它们应该可以恢复,但并非所有程序都编写得很好。并且如果这导致正在执行挂起的程序挂起,则我们将出现死锁。
我在几种软件上测试了http://www.codeproject.com/KB/threads/pausep.aspx:
它工作正常。
PsSuspend和Pausep是两个有效的选项。