どのようにWindows上の子プロセスのステータスおよびリソースの使用状況を知るには?

StackOverflow https://stackoverflow.com/questions/870253

質問

私は、子プロセスを起動するプログラムを、書きたいです。子プロセスは、ウィンドウモードまたはコンソールモードのプログラムであってもよい。

私は、子プロセスの状態とリソースの使用状況を監視します。例えば私は、子プロセスがまだ実行中または終了しているかを知りたいです。それが終了した場合、私は(正常に終了したため、またはクラッシュのさ?)理由を知りたい。

と子プロセスが実行中および/またはそれが終了し、私はそのリソースの使用状況、特にCPU時間(ユーザー時間、システム)とメモリ使用量(仮想サイズおよび/またはRSSを)知ってほしいです。数字は非常に正確でない場合、それはOKです。

Unixの用語では、私はフォーク、幹部、waitpidをとGETRUSAGEからしたいと思います。そして、フォーク+のsetrusage +幹部は、子供のリソース使用量を制限することができます。しかし、私は、Windowsプラットフォーム上でこれらを行う方法がわからない。

私はWindowsのAPI名を指してください。私は残りの部分を自分で勉強することができます。

は、Windows API以外のライブラリを使用していないことを好みます。それは親のデバッガとして活躍し、子プロセスにアタッチされていないことを好みます。ちょうど好むが、まだ受け入れられない。

役に立ちましたか?

解決

あなたはCreateProcess関数を呼び出すと、

、それはプロセスにハンドルを返します。

プロセスが終了したか、タイムアウトが経過するまで

プロセスハンドル上のWaitForSingleObjectがブロックされます。ゼロのタイムアウトはすぐに戻り、プロセスがまだ実行されているかどうかを示します。

BOOL IsProcessRunning(HANDLE process)
{
    return WaitForSingleObject(process, 0) != WAIT_OBJECT_0;
}

void WaitForProcessToExit(HANDLE process)
{
    WaitForSingleObject(process, INFINITE);
}

実行中のプロセスの終了コードを取得するには、GetExitCodeProcessを使用することができます。ただし、エラーコードが何を意味するかを解釈する必要があります。 0xc0000005では、アクセス違反のために典型的であるが、すべてのクラッシュが、このエラーコードをもたらさない。

は、リソースの使用状況について、あなたはIOの情報を取得するために、GetProcessMemoryInfoは、メモリの統計情報を取得するために、GDIが情報を扱う取得するには、合計CPU時間を取得するためにGetGuiResourcesをGetProcessTimesを呼び出し、GetProcessIoCountersことができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top