vfork() mit execl()?
-
Hallo zusammen,
ich möchte von einer Applikation heraus einen zweiten Prozess starten der nicht selbstständig stoppt, sondern vom ersten Prozess gestoppt werden soll.
Ich habe mit vfork() einen Kindprozess erstellt und darin dem execl() die ausführbare Datei übergeben. Nun soll es aber möglich sein, wie bereits erwähnt vom Vaterprozess diesen neuen, vom Kindprozess abgeleiteten Prozess wieder zu stoppen. Ich habe es zunächst versucht mitsystem("killall Prozess2");
Der Prozess wurde gestoppt, es blieb aber ein Zombieprozess übrig. Dann habe ich es zusätzlich mit waitpid() versucht. Als Option übergab ich ein WNOWAIT (oder so ähnlich, jedenfalls nichtblockieren) Das funktionierte einmal, danach wurde der 2. Prozess nicht mehr gestoppt (Jedesmal wenn der 2. Prozess gestoppt wird, wird er wieder neu gestartet, also ein "Restart").
Schließlich habe ich frustriert aufgegeben und den 2. Prozess mit einem system() gestartet und ebenso gekillt. Ich weiß, es ist nicht schön, aber es funktioniert. Dennoch würde mich interessieren, wie man das "schön" macht.
Alles, was ich bisher gesehen habe, waren Kindprozesse, die sich selbst beendet haben.Vielen Dank für Eure Hilfe und viele Grüße, luutsch
-
Ich kann das Problem nicht nachvollziehen. Vielleicht liegt es an dem gestarteten Programm.
Probier mal lieber man: kill(2) aus, anstelle irgend einen Aufruf über system. Ansonsten poste mal ein minimales Beispielprogramm, was dein Problem illustriert.