Attività: Elimina automaticamente tutti i processi figlio se il processo padre termina. Gli approvvigionamenti dei genitori possono essere interrotti non solo in modo corretto, ma anche eliminando ProcessExplorer, ad esempio. Come posso farlo?Come terminare i processi secondari quando il processo padre termina in C#
domanda simile in С topic consigli per utilizzare oggetti di lavoro. Come usarlo in C# senza esportare DLL esterne?
Ho provato a utilizzare Oggetti lavoro. Ma questo codice non funziona correttamente:
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 ritorna con l'errore. GetLastError restituisce l'errore 24. Tuttavia, PInvoke.AssignProcessToJobObject funziona e il processo figlio viene aggiunto a Coda lavori (lo si può vedere in ProcessExplorer). Ma, dato che PInvoke.SetInformationJobObject non funziona, il processo generato rimane attivo quando uccido un genitore.
Che cosa ho errato in questo codice?
L'altra domanda di risposta sembra essere buona con me, solo pinvoke le funzioni dal kernel32. http://www.pinvoke.net/default.aspx/kernel32.assignprocesstojobobject –