マイクロソフトはここで安全にプレーしました。彼らの記事「Creating a Child Process with Redirected Input and Output」では、次のように述べています。
このプロセスが終了すると、残りの開いているハンドルがクリーンアップされます。
大規模なアプリケーションでのリソース リークを回避するには、ハンドルを明示的に閉じます。
これはまったく役に立たない。ハンドルは?どのプロセスで?
頭を整理したい。
を使用して親プロセスでハンドルが作成されるとSECURITY_ATTRIBUTES.bInheritHandle = TRUE
、子プロセスはそれを参照して使用でき、ハンドルは両方のプロセスで同じ値とアクセス権を持ちます。
しかし、それは同じハンドルですか、それともたまたま同じ数値表現を持つコピーですか?
hRead
パイプから読み取れるように子プロセスにハンドルを渡し、子プロセスがハンドルを閉じる場合、親プロセスからもハンドルを閉じる必要がありますか? 子プロセスの下からパイプをワイプしませんか?
私の実験では、子がハンドルを閉じた後に子に渡されCloseHandle
たハンドルを閉じようとすると、成功が返されます。hRead
これは、はい、閉じる必要があることを強く主張しています。ただし、ここでより堅実なアドバイスをいただければ幸いです。