Wie werden untergeordnete Prozesse beendet, wenn der übergeordnete Prozess in C # @ beendet wurd
Aufgabe Alle untergeordneten Prozesse automatisch beenden, wenn der übergeordnete Prozess beendet wird. Übergeordnete Prozesse können nicht nur auf korrekte Weise beendet werden, sondern beispielsweise auch durch Beenden in ProcessExplorer. Wie kann ich es tun
Ähnliche Frage in С topic Hinweis zur Verwendung von Job-Objekten. Wie verwende ich es in C #, ohne eine externe DLL zu exportieren?
Ich habe versucht, Job Objects zu verwenden. Aber dieser Code funktioniert nicht richtig:
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 gibt mit Fehler zurück. GetLastError gibt den Fehler 24 zurück. PInvoke.AssignProcessToJobObject funktioniert jedoch und der Jobwarteschlange wurde ein untergeordneter Prozess hinzugefügt (ich kann ihn im ProcessExplorer sehen). Aber da PInvoke.SetInformationJobObject nicht funktioniert, bleibt der erzeugte Prozess am Leben, wenn ich den übergeordneten Prozess töte.
Was habe ich falsch in diesem Code?