Как завершить дочерние процессы, когда родительский процесс завершен в C #

Задача: Автоматическое уничтожение всех дочерних процессов, если родительский процесс завершается. Родительские процессы могут быть прекращены не только правильным способом, но также, например, путем уничтожения в ProcessExplorer. Как мне это сделать?

Подобный вопрос вС тема советы по использованию объектов Job. Как использовать его в C # без экспорта внешних DLL?

Я пытался использовать Job Objects. Но этот код не работает должным образом:

  var job = PInvoke.CreateJobObject(null, null);
  var jobli = new PInvoke.JOBOBJECT_BASIC_LIMIT_INFORMATION();

  jobli.LimitFlags = PInvoke.LimitFlags.JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
                   | PInvoke.LimitFlags.JOB_OBJECT_LIMIT_PRIORITY_CLASS
                   | PInvoke.LimitFlags.JOB_OBJECT_LIMIT_JOB_TIME
                   | PInvoke.LimitFlags.JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION
                   | PInvoke.LimitFlags.JOB_OBJECT_LIMIT_JOB_MEMORY;

  var res = PInvoke.SetInformationJobObject(job, PInvoke.JOBOBJECTINFOCLASS.JobObjectBasicLimitInformation, jobli, 48);

  if (!res)
  {
    int b = PInvoke.GetLastError();
    Console.WriteLine("Error " + b);
  }

  var Prc = Process.Start(...);

  PInvoke.AssignProcessToJobObject(job, Prc.Handle);

PInvoke.SetInformationJobObject возвращается с ошибкой. GetLastError возвращает ошибку 24. Однако PInvoke.AssignProcessToJobObject работает, и дочерний процесс добавляется в очередь заданий (я вижу это в ProcessExplorer). Но, поскольку PInvoke.SetInformationJobObject не работает - порожденный процесс остается живым, когда я убиваю родительский процесс.

Что у меня неверного в этом коде?

Ответы на вопрос(1)

Ваш ответ на вопрос