我正在尋找不同的方法來暫停和恢復程序通過其在Windows XP下的進程ID的特定進程。如何在Windows下暫停/恢復任何外部進程?
Process suspend/resume tool與SuspendThread
/ResumeThread
這樣做,但會警告多線程程序和死鎖問題。
PsSuspend看起來不錯,但我不知道它是否有什麼特別的死鎖或使用其他方法?
首選語言:C++/Python的
我正在尋找不同的方法來暫停和恢復程序通過其在Windows XP下的進程ID的特定進程。如何在Windows下暫停/恢復任何外部進程?
Process suspend/resume tool與SuspendThread
/ResumeThread
這樣做,但會警告多線程程序和死鎖問題。
PsSuspend看起來不錯,但我不知道它是否有什麼特別的死鎖或使用其他方法?
首選語言:C++/Python的
我覺得這是一個很好的理由有Windows無SuspendProcess()函數。具有這樣的功能爲不穩定的系統打開了大門。除非您自己創建了該流程,否則您不應暫停流程。 如果您自己編寫該過程,則可以使用事件(請參閱MSDN中的SetEvent()等)或其他類型的消息傳遞以在過程中觸發暫停命令。
如果「調試調試器」(例如,使用logger.exe
以跟蹤windbg.exe
進行的所有API調用),看來調試器使用SuspendThread()
/ResumeThread()
暫停所有在進程中的線程的正在調試。
PsSuspend可能會使用一種不同的方式掛起進程(我不確定),但仍然可以掛起其他進程:如果您掛起的進程持有另一進程所需的共享同步對象,你可能阻止其他進程取得進展。如果兩個程序都寫得很好,當你恢復暫停的程序時,它們應該恢復,但並不是所有的程序都寫得很好。如果這會導致正在執行掛起的程序掛起,那麼就會出現死鎖。
如果你小心使用它,那麼它工作正常。如果你使用它來創建死鎖,那麼你創建了一個死鎖。 – 2008-11-20 08:00:27
我不確定這是否能完成這項工作,但使用MS Systernals的ProcessExplorer可以暫停一個進程。
有人說這裏:https://superuser.com/a/155263,我也發現它。
閱讀here,你也有psutil的蟒蛇,你可以使用它像:
>>> import psutil
>>> pid = 7012
>>> p = psutil.Process(pid)
>>> p.suspend()
>>> p.resume()
SEO的評論如下:PsSuspend看起來像一個窗口當量的Linux/UNIX的`殺-SIGSTOP`或`殺-SIGCONT「(甚至是」killall「)。 – 2010-10-21 21:30:28