Cómo finalizar procesos secundarios cuando el proceso primario finalizó en C #

Tarea: Elimine automáticamente todos los procesos secundarios si el proceso primario finaliza. Los procedimientos principales se pueden terminar no solo de la manera correcta, sino también mediante la eliminación en ProcessExplorer, por ejemplo. ¿Cómo puedo hacerlo?

Pregunta similar enС tema consejos para usar objetos de trabajo. ¿Cómo usarlo en C # sin exportar una DLL externa?

Traté de usar Job Objects. Pero este código no funciona correctamente:

  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 vuelve con error. GetLastError devuelve el error 24. Sin embargo, PInvoke.AssignProcessToJobObject funciona y el proceso secundario se agrega a Job Queue (puedo verlo en ProcessExplorer). Pero, porque PInvoke.SetInformationJobObject no funciona: el proceso generado permanece vivo cuando mato al padre uno.

¿Qué tengo incorrecto en este código?

Respuestas a la pregunta(5)

Su respuesta a la pregunta