Desidero sapere nel mio programma se esiste un processo con un determinato ID. Ho implementato la seguente funzione per ottenere ciò, che controlla se esiste /proc/<PID>/maps
. Tuttavia, noto che anche se uccido una funzione con un dato ID, questa funzione restituisce ancora 1. C'è un modo migliore per ottenere ciò che sto cercando di fare e, in caso contrario, qual è il problema con questo codice, se esiste, perché? è vero tornando 1 quando dovrebbe essere tornando 0.Determinare se esiste un processo dal suo ID processo
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;
}
Stai aspettando tra l'emissione dell'uccisione e il controllo dell'uscita? Cosa succede se fai 'ps -ef | grep _PID_ '? –
Ya sto chiamando proc_exists in un ciclo, in attesa che il processo venga ucciso. Ora controllo con ps -ef | grep, dice la funzione defunt. Qual è la funzione defunt? – pythonic
Significa che il processo non è più in esecuzione; Tuttavia, non è stato ripulito tramite una chiamata a 'wait()' o 'waitpid()'. È ancora un bersaglio valido per i segnali e ha ancora una voce nella tabella dei processi. –