1

Windows APICreateProcess関数を使用します。そのためのmsdnマニュアルで、私は見つけました

関数が成功した場合は、終了時に CloseHandle 関数を呼び出して、hProcess ハンドルと hThread ハンドルを閉じてください。そうしないと、子プロセスが終了したときに、親プロセスが子プロセスへのハンドルをまだ開いているため、システムは子プロセスのプロセス構造をクリーンアップできません。

では、どこでこれを行うべきですか?

プロセスが開始され、彼の人生の痕跡がないという状況です。プロセスが作成されるスレッドを作成する必要がありますか?たとえばWaitForSingleObject、プロセスが終了するまでスレッドが待機するため、ハンドルが解放されますか?

4

1 に答える 1

4

子プロセスが終了するのを待つ必要はありません。ハンドルが不要になっCloseHandleたときに待つ必要があります。

これは、プロセスが終了した後でもプロセスへのハンドルを保持したい場合があるためです。たとえば、返品ステータスを確認することができます。ハンドルを持っている限り、Windows はその後クリーンアップできません。

しかし、子供が何をするかを気にしなくなったら、ハンドルを閉じて先に進みます。

気にする場合は、 を呼び出しWaitForSingleObjectて、 から取得したハンドルを渡してくださいCreateProcess。またはRegisterWaitForSingleObject、プロセスの終了時に呼び出されるコールバック関数を使用して呼び出します (再びプロセス ハンドルを渡します)。

于 2013-04-17T22:08:23.980 に答える