我正在寻找不同的方法来暂停和恢复程序在Windows XP下通过它的进程ID的特定进程。
进程暂停/恢复工具通过SuspendThread
/ ResumeThread
但会警告multithreading程序和死锁问题。
PsSuspend看起来没问题,但我想知道它是否有什么特别的死锁或使用其他方法?
首选语言:C ++ / Python
如果您“调试调试器”(例如,使用logger.exe
跟踪由windbg.exe
所做的所有API调用),看起来调试器使用SuspendThread()
/ ResumeThread()
挂起进程中的所有线程调试。
PsSuspend可能会使用一种不同的挂起进程的方式(我不确定),但是仍然可以挂起其他进程:如果挂起的进程持有另一个进程所需的共享同步对象,则可能会阻塞从其他进程中取得进展。 如果两个程序都写得很好,当你恢复被暂停的程序时,它们应该恢复,但并不是所有的程序都写得很好。 如果这导致你正在执行挂起的程序挂起,那么你有一个死锁。
我不确定这是否能完成这项工作,但是使用MS Systernals的ProcessExplorer,您可以暂停进程。
有人说: https : //superuser.com/a/155263 ,我也在那里找到了。
在这里阅读,你也有python的psutil,你可以像这样使用它:
>>> import psutil >>> pid = 7012 >>> p = psutil.Process(pid) >>> p.suspend() >>> p.resume()
我认为有一个很好的理由,为什么在Windows中没有SuspendProcess()函数。 具有这样的功能打开了一个不稳定的系统的大门。 除非你自己创建了这个过程,否则你不应该暂停一个过程。 如果你自己编写这个过程,你可以使用一个事件(参见MSDN中的SetEvent()等)或其他类型的消息来触发进程中的暂停命令。