Windows XPでプロセスIDを使用して、特定のプロセスをプログラムで一時停止および再開するさまざまな方法を探しています。
プロセスの一時停止/再開ツールはSuspendThread
/でそれを行いますがResumeThread
、マルチスレッドプログラムとデッドロックの問題について警告します。
PsSuspendは問題ないように見えますが、デッドロックについて何か特別なことをしているのでしょうか、それとも別の方法を使用しているのでしょうか。
優先言語:C ++ / Python
Windows XPでプロセスIDを使用して、特定のプロセスをプログラムで一時停止および再開するさまざまな方法を探しています。
プロセスの一時停止/再開ツールはSuspendThread
/でそれを行いますがResumeThread
、マルチスレッドプログラムとデッドロックの問題について警告します。
PsSuspendは問題ないように見えますが、デッドロックについて何か特別なことをしているのでしょうか、それとも別の方法を使用しているのでしょうか。
優先言語:C ++ / Python
「デバッガーをデバッグする」場合(たとえば、logger.exe
によって行われたすべてのAPI呼び出しをトレースするために使用する場合windbg.exe
)、デバッガーは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()
いくつかのソフトウェアでhttp://www.codeproject.com/KB/threads/pausep.aspxをテストしました。
それはうまくいきます。
PsSuspendとPausepは2つの有効なオプションです。
Windows に SuspendProcess() 関数がないのには十分な理由があると思います。このような機能を持つことは、不安定なシステムへの扉を開きます。自分でプロセスを作成しない限り、プロセスを一時停止してはなりません。そのプロセスを自分で作成した場合は、イベント (MSDN の ::SetEvent() などを参照) または別の種類のメッセージングを使用して、プロセスで一時停止コマンドをトリガーできます。