現在のディレクトリで MinGW ディストリビューションの make.exe を実行し、その STDOUT データと終了コードを利用するプログラムを作成しようとしています。CreatePipe で作成された、データをフェッチする STDOUT を処理するためのハンドルがあります。そのパイプで ERROR_HANDLE_EOF を取得すると、プロセスが終了したと想定し、その終了コードを取得しようとします。
if(session->pid == 0) return;
HANDLE hp = OpenProcess(PROCESS_QUERY_INFORMATION |
PROCESS_TERMINATE, TRUE, session->pid);
if(hp == NULL) {
printf("OpenProcess(%i) failed, error: %i\n",
session->pid, (int)GetLastError());
return;
}
私のコードは、テストした他のすべての MinGW ユーティリティ (pwd、ls など) で動作し、問題なく STDOUT と終了コードを取得できます。しかし、make で試してみると、上記のコードは次のメッセージを表示します。
「OpenProcess(2032) に失敗しました。エラー: 87」
エラーコード87をグーグルで検索したところ、「無効なパラメーター」と表示されました。2032 のような正のプロセス ID について何が無効なのかわかりません。何かアイデアはありますか?