Hallo zusammen,
ich habe ein Problem, das ich noch nicht ganz verstehe. 2
Konsolen-Programme:
1.) slave : wird gestartet, macht was, beendet bei SIGINT bzw Strg-C
Beim Beenden schreibt er noch Einstellungen in Dateien, das kann 1-2s
dauern.
2.) master: startet slave. Wenn master beendet werden soll, soll er auch
slave (kontrolliert) beenden.
slave wird mit TProcess gestartet. Options sind versuchsweise
mittlerweile von [poUsePipes] aufgeblasen auf
[poUsePipes,poStderrToOutPut,poDefaultErrorMode]. (poUsePipes brauche
ich, weil ich den Standard-Out auslese)
Leider ändern die Options am Problem nichts: slave beendet sich nicht.
Habe schon folgende Varianten probiert:
1 | fpkill(proc.ProcessID,2);
|
2 | /bin/kill als Subprozeß ausgeführt
|
3 | proc.Terminate(0);
|
Terminate() ist das einzige, was zum Ende des Prozesses führt. Aber da
hat slave doch gar keine Chance zu reagieren und z.B. noch Dateien zu
Ende zu schreiben, oder?
In der Konsole bekomme ich für master und slave PIDs angezeigt. kill -2
an den Slave zeigt keinerlei Reaktion (?!?). kill -15 auch nicht.
kill -9 geht, aber das ist effektiv wieder die Panzerfaust wie
Terminate();
Könnt ihr mir einen Tipp geben, wo ich geistig falsch abgebogen bin? Ist
das eine Eigenschaft von Linux oder bin ich nur zu blöd? (OK,
gefährliche Frage...)
OS ist Linux Mint auf PC.
Danke schon mal und viele Grüße
Andy