Ich habe ein C++ - Programm, das als Wachhund gegenüber anderen fungiert. Wenn festgestellt wird, dass ein Prozess nicht mehr ausgeführt wird, wird er über system
neu gestartet. Das Problem ist, dass, wenn ich den Watchdog-Prozess abbringe, alle Prozesse, die er gestartet hat, auch sterben.Wie spuckt man Child-Prozesse, die nicht mit Eltern sterben?
Der neue untergeordnete Prozess wird ordnungsgemäß gestartet und kann ohne Probleme ausgeführt werden. Aber wenn der Elternteil stirbt (jetzt dieser ProcessWatchdog
Prozess), stirbt auch das Kind. Wie kann ich einen Child-Prozess erzeugen, der völlig unabhängig von dem Elternteil ist?
Ich habe versucht mit pclose
und popen
, laufende Shell-Skripte, die Prozesse starten, und ein paar andere Taktiken, aber ohne Erfolg. Ich ignoriere SIGHUP
Signale in den Kind-Prozessen, aber sie sterben immer noch.
Idealerweise möchte ich dem System mitteilen, dass es einen Prozess starten soll, der völlig unabhängig von den Eltern ist. Ich will, dass die trace
des Kindes mit dem Kind endet, und für es/das System keine Ahnung hat, dass ProcessWatchdog
es in erster Linie gestartet hat.
Gibt es eine Möglichkeit, das kann ich tun?
Ich schreibe dies in C++, auf Linux.
möglich duplicate von [Machen Sie Kind-Prozess mit dem System launched() weiter, nachdem Eltern bekommt Kill-Signale und Ausgänge] (http://stackoverflow.com/questions/12945189/make-child- process-launched-with-system-keep-running-nachher-parent-gets-kill-sig) –
Ich glaube nicht, System zu verwenden ist eine gute Idee .... – Alexis
Warum ist das System nicht eine gute Idee? Neben den offensichtlichen Sicherheitsproblemen? Ich mache das auf einem eingebetteten System in einer sehr kontrollierten Umgebung, und ich mache mir keine Sorgen über fehlerhafte Systemaufrufe. Gibt es einen anderen Grund, warum ich vorsichtig sein sollte? –