54696


`Process.Start()`
でサブプロセスを作っています。通常はメインプロセスからサブプロセスの寿命を管理しているのですが、メインプロセスが異常終了した場合にサブプロセスが残ってしまいます。

Q1. メインプロセスが終了したときにサブプロセスも自動的に終了させる設定はありますでしょうか。

Q2. 自動終了させる設定がないとしたら、このサブプロセスを終了させるのはどのようにするのがセオリーでしょうか。

* * *

  * Windows10 64bit
  * .NET Framework 4.7.2


CC BY-SA 4.0
2019-05-03T15:00:10.477
54692
2019-05-03T16:23:19.347
14817
question
c# .net
メインプロセスが終了したときにサブプロセスも自動終了させたい


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](https://github.com/Microsoft/vstest/blob/7b6248203164f8ea821f6795632bd22e0b69afb0/src/DataCollectors/TraceDataCollector/ProcessJobObject.cs)が参考になると思います。


CC BY-SA 4.0
2019-05-03T16:23:19.347
54696
2019-05-03T16:23:19.347
9113
54692
answer