Si fork
un processus enfant et le processus enfant se termine avant que le parent appelle waitpid
, les informations d'état de sortie définies par waitpid
sont-elles toujours valides? Si oui, quand cela devient-il invalide? Par exemple, comment puis-je m'assurer que je peux appeler waitpid
sur le PID enfant et continuer à obtenir des informations d'état de sortie valides après un laps de temps arbitraire, et comment puis-je "nettoyer" (dire au système d'exploitation que je ne suis plus intéressé par informations d'état de sortie pour le processus fils fini)? Je jouais avec le code suivant, et il semble que l'information de statut de sortie est valide pendant au moins quelques secondes après la fin de l'enfant, mais je ne sais pas pour combien de temps ou comment informer l'OS que je ne sera pas appeler à nouveau waitpid
:waitpid fournit-il des informations d'état valides pour un processus enfant qui a déjà quitté?
#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;
}
En effet, le deuxième appel 'waitpid' a échoué. Je n'y ai pas pensé! Merci d'avoir signalé cela. –