Ich möchte in meinem Programm wissen, ob ein Prozess mit einer bestimmten ID existiert. Ich habe die folgende Funktion implementiert, um das zu erreichen, die prüft, ob /proc/<PID>/maps
existiert. Ich stelle jedoch fest, dass selbst wenn ich eine Funktion mit einer bestimmten ID abbringe, diese Funktion immer noch 1 zurückgibt. Gibt es einen besseren Weg, um das zu erreichen, was ich versuche, und wenn nicht, was ist das Problem mit diesem Code, wenn überhaupt es kehrt 1, wenn es 0.Ermitteln, ob ein Prozess von seiner Prozess ID
int proc_exists(pid_t pid)
{
stringstream ss (stringstream::out);
ss << dec << pid;
string path = "/proc/" + ss.str() + "/maps";
ifstream fp(path.c_str());
if (!fp)
return 0;
return 1;
}
Warten Sie zwischen der Ausgabe des Kills und der Überprüfung, dass er beendet wurde? Was passiert, wenn Sie 'ps -ef | grep _PID_ '? –
Ich rufe proc_exists in einer Schleife auf und warte darauf, dass der Prozess beendet wird. Jetzt überprüfe ich mit ps -ef | Grep, es sagt Defunt-Funktion. Was ist Defunt-Funktion? – pythonic
Es bedeutet, dass der Prozess nicht mehr läuft; Es wurde jedoch nicht durch einen Aufruf von 'wait()' oder 'waitpid()' bereinigt. Es ist immer noch ein gültiges Ziel für Signale und hat immer noch einen Eintrag in der Prozesstabelle. –