Se I fork
un processo figlio e il processo figlio si chiude prima che il genitore chiama waitpid
, le informazioni sullo stato di uscita impostate da waitpid
sono ancora valide? Se è così, quando diventa non valido; cioè, come posso essere sicuro di poter chiamare waitpid
sul pid figlio e continuare a ottenere informazioni sullo stato di uscita valide dopo un lasso di tempo arbitrario, e come faccio a "ripulire" (dire al sistema operativo che non sono più interessato al uscite informazioni sullo stato per il processo figlio finito)?Waitpid restituisce informazioni di stato valide per un processo figlio che è già stato chiuso?
Stavo giocando con il seguente codice, e sembra che le informazioni sullo stato di uscita siano valide almeno per alcuni secondi dopo che il bambino ha terminato, ma non so per quanto tempo o come informare il sistema operativo che non sarà chiamare waitpid
ancora:
#include <assert.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main()
{
pid_t pid = fork();
if (pid < 0) {
fprintf(stderr, "Failed to fork\n");
return EXIT_FAILURE;
}
else if (pid == 0) { // code for child process
_exit(17);
}
else { // code for parent
sleep(3);
int status;
waitpid(pid, &status, 0);
waitpid(pid, &status, 0); // call `waitpid` again just to see if the first call had an effect
assert(WIFEXITED(status));
assert(WEXITSTATUS(status) == 17);
}
return EXIT_SUCCESS;
}
In effetti, la seconda chiamata 'waitpid' non è riuscita. Non ci ho pensato! Grazie per averlo indicato. –