Code: Alles auswählen
try
phnd := TProcess.Create(nil);
phnd.CommandLine := sndplayer + sound;
phnd.Options := [];
phnd.Execute;
finally
phnd.Free;
end;
Nun erzeugt mir das leider jedesmal einen Zombieprozess (<defunct>), und die sammeln sich an. Da mein Programm dauerhaft läuft, werden dessen Childs, sprich die Zombies auch nicht gelöscht.
Nun habe ich zu den Zombies die Info gefunden "Der Linux-Kernel bietet für Prozesse, die nicht am Status ihrer Kinder interessiert sind, eine einfache – wohlgemerkt nicht standardisierte – Methode, Zombies loszuwerden: Gibt ein Prozess explizit an, dass er SIGCHLD ignorieren will (im Gegensatz zum Ignorieren per Default, wenn kein Handler angegeben ist), so löscht Linux die Zombies automatisch, ohne auf eine Statusabfrage zu warten." https://de.wikipedia.org/wiki/Zombie-Pr ... nux-Kernel
Sowas hätte ich gern, allerdings finde ich unter https://www.freepascal.org/docs-html/fc ... tions.html nichts dazu.