0

特定の状況でプログラムがハングする可能性があるという問題があります。タスクマネージャーを使用せずに、Windows呼び出しで独自のプログラムを検索して破棄する方法はありますか。これをプログラム自体に含めることはおそらく意味がありませんが、バンドルされたものとしては誰も見ることができません。

これを行うための最良の方法は何ですか、プログラムを停止するためにどれだけ深く掘り下げる必要があり、OSをクラッシュさせないようにするためにどれだけ浅く保つ必要がありますか?

4

6 に答える 6

2

.batファイルを作成し、そのファイルにTaskkillコマンドを挿入して、アプリケーションを強制的に終了することができます。コマンドは次のようになります。

taskkill /f /im notepad.exe
于 2009-07-24T21:33:09.640 に答える
1

この関数を使用して、実行中のプロセスを列挙できますEnumProcesses()。これにより、プロセス名を検索し、PIDを取得できます。TerminateProcess()PIDを使用すると、ハング したプロセスを強制終了するために呼び出すために必要なプロセスへのハンドルを開くことができます。

MSDNでの使用方法の例があります。EnumProcesses

一部の擬似コードは次のようになります。

EnumProcesses(pidArray, sizeofArray, &bytesReturned);
for(int i=0; i < bytesReturned/sizeof(DWORD); i++) {
  if(getProcessName(pidArray[i]) == "ourProcess"){
    HANDLE hProc = OpenProcess(PROCESS_TERMINATE, FALSE, pidArray[i]);
    TerminateProcess(hProc, 0);
  }
}
于 2009-07-24T21:38:16.790 に答える
1

ハングする状況を修正する必要がありますが、プログラム自体を強制終了する1つの方法は、アプリの起動時に新しいスレッドを生成し、そのスレッドでアプリケーションをポーリングして、必要に応じて強制終了することです。

Windowsでスレッドを強制終了します。

于 2009-07-24T21:10:31.980 に答える
1

1つのオプションは、ウォッチドッグとして機能するWindowsサービスを作成することです。プログラムは.exenameで見つけることができます。次に、プログラムがハングするかどうかを判断する方法(たとえば、単純なプロセス間通信やクライアント/サーバーのもの)が必要であり、必要に応じて再起動します。

しかし、それは「誰も見ない」ということではありません。

于 2009-07-24T21:11:11.277 に答える
1

TerminateProcessを使用してプロセスを終了できます。EnumProcessesを使用してターゲットプロセスIDを決定してから、OpenProcessを呼び出してプロセスのハンドルを取得し、プロセスを終了する必要があります。

于 2009-07-24T21:24:59.283 に答える
0

sysinternals の pstools から何かを実装するのはどうですか?

于 2009-07-24T21:23:00.473 に答える