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;
È stato utile?

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 da pid esiste, ma non ha ancora cambiato stato,   quindi viene restituito 0 .

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top