Perché WIFEXITED restituisce True durante il processo in esecuzione?
-
10-07-2019 - |
Domanda
Quando aspetto uno specifico gruppo di processi in esecuzione che è un processo figlio, WIFEXITED restituisce true dicendo che il processo è terminato? Funziona così? Sembra che ci sia qualcosa che non capisco ....
if ( waitpid(-pgid, &pstatus, WUNTRACED|WNOHANG ) == -1)
perror("Wait error");
if ( WIFEXITED(pstatus) ) {
strncpy(buf, "Exited", buf_size);
return 0;
Soluzione
Come hai specificato WNOHANG
penso che waitpid
stia restituendo 0
e pstatus
ha il valore che aveva prima WIFEXITED
non funziona con i dati aggiornati.
se
WNOHANG
è stato specificato e uno o più figli specificato dapid
esiste, ma non ha ancora cambiato stato, quindi viene restituito0
.
Altri suggerimenti
waitpid
restituisce il pid figlio raccolto se raccoglie correttamente un figlio. Se utilizzato con WNOHANG
, restituisce immediatamente 0 se non sono usciti bambini. Pertanto, è necessario verificare se il valore restituito è 0 o un pid prima di ispezionare status
. Vedi qui per i dettagli:
http://pubs.opengroup.org/onlinepubs/9699919799/functions/ waitpid.html