2008-09-19 32 views
8

我正在尋找不同的方法來暫停和恢復程序通過其在Windows XP下的進程ID的特定進程。如何在Windows下暫停/恢復任何外部進程?

Process suspend/resume toolSuspendThread/ResumeThread這樣做,但會警告多線程程序和死鎖問題。

PsSuspend看起來不錯,但我不知道它是否有什麼特別的死鎖或使用其他方法?

首選語言:C++/Python的

+2

SEO的評論如下:PsSuspend看起來像一個窗口當量的Linux/UNIX的`殺-SIGSTOP`或`殺-SIGCONT「(甚至是」killall「)。 – 2010-10-21 21:30:28

回答

0

我覺得這是一個很好的理由有Windows無SuspendProcess()函數。具有這樣的功能爲不穩定的系統打開了大門。除非您自己創建了該流程,否則您不應暫停流程。 如果您自己編寫該過程,則可以使用事件(請參閱MSDN中的SetEvent()等)或其他類型的消息傳遞以在過程中觸發暫停命令。

5

如果「調試調試器」(例如,使用logger.exe以跟蹤windbg.exe進行的所有API調用),看來調試器使用SuspendThread()/ResumeThread()暫停所有在進程中的線程的正在調試。

PsSuspend可能會使用一種不同的方式掛起進程(我不確定),但仍然可以掛起其他進程:如果您掛起的進程持有另一進程所需的共享同步對象,你可能阻止其他進程取得進展。如果兩個程序都寫得很好,當你恢復暫停的程序時,它們應該恢復,但並不是所有的程序都寫得很好。如果這會導致正在執行掛起的程序掛起,那麼就會出現死鎖。

2

閱讀here,你也有psutil的蟒蛇,你可以使用它像:

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