質問: `Process.Start()` でサブプロセスを作っています。通常はメインプロセスからサブプロセスの寿命を管理しているのですが、メインプロセスが異常終了した場合にサブプロセスが残ってしまいます。 Q1. メインプロセスが終了したときにサブプロセスも自動的に終了させる設定はありますでしょうか。 Q2. 自動終了させる設定がないとしたら、このサブプロセスを終了させるのはどのようにするのがセオリーでしょうか。 --- * Windows10 64bit * .NET Framework 4.7.2
回答: A1. 私の知る限り、.NET Frameworkの範囲で設定はありません。 A2. PinvokeでWindows APIを呼び出すことになると思います。 大まかな処理の流れは下記のようになると思います。 1. `CreateJobObject` 関数でジョブオブジェクトを作成する。 2. `SetInformationJobObject`関数で `JOBOBJECT_BASIC_LIMIT_INFORMATION::LimitFlags` に `JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE` を設定する。 3. `AssignProcessToJobObject`関数でジョブに子プロセスを紐付ける。 4. 子プロセスが必要な期間、ジョブオブジェクトのハンドルを保持する。(開放しなければプロセス終了時に開放される) GitHubのMicrosoftのリポジトリだと、ProcessJobObject.csが参考になると思います。