testen ob PID (noch) vorhanden ist
-
Hallo,
In meinem Program wird ein externes Programm per fork() und dann execlp() im child Prozess gestartet. Das externe Programm soll in parallel zu meinem Parent Programm laufen und steht mit diesem auch ueber eine Message Queue in Verbindung.
Nun wuerde ich gerne im Parent Programm nachpruefen ob das Child noch laueft. Die PID des Childes gibt mir fork() schon, da ich aber NICHT warten will bis der Child Prozess terminiert hat, ist waitpid() keine Loesung. Was ich eher suche ist ein "PID_exists( pid )". Gibt es eine solche Funktion bzw, wie geht man in so einer Situation normalerweise vor?
Ich hatte mir auch schon ueberlegt einen Thread zu starten, der nur auf waitpid() wartet und ggf den Thread terminiert, eine Thread id kann ich auf soetwas afair schon pruefen.
-
Eventuell hilft dir das Flag WNOHANG für waitpid weiter. Da blockiert waitpid nicht, sondern prüft im Grunde nur, ob der Prozess noch läuft. Ansonsten musst Du schauen ob es ein Verzeichnis /proc/$PID exisitiert.
-
man: waitpid ist die Lösung :). Es gibt ja extra einen Parameter um zu sagen, dass waitpid nicht warten soll:
WNOHANG
pid_t ret = waitpid(pid, 0, WNOHANG); if(ret == 0) { // existiert } else if(ret == -1) { // fehler perror("waitpid"); } else { // pid exit }
@tntnet
*grml* du warst schneller :p
-
Super, danke! Das ist genau die Loesung. Ich hatte das wohl
mit dem WNOHANG Flag uebersehen.
-
mit kill (pid, 0) kann man das auch überprüfen.