Récupérer le code de retour d’un programme qui s’est terminé

Problème

Vous souhaitez obtenir le code de retour d’un programme que vous avez lancé et qui s’est fini.

Solution

Utilisez une fonction parmi wait(), waitpid(), wait3() et wait4(), puis obtenez le code retour avec la macro WEXITSTATUS().

Discussion

Lorsqu’un programme se termine, pour éviter qu’il ne reste zombie trop longtemps, nous devons lire son état de fin d’exécution avec une fonction de la famille de wait(). Les quatre citées ci-dessus peuvent prendre en argument un pointeur sur un entier. Cet entier, contient, dans ses huit bits de poids faible, le code de retour du programme tel qu’il a été fourni à exit(). Voici comment l’obtenir :


int status; 
if ((0 < waitpid (pid, &status, 0)) && (WIFEXITED (status))) 
  printf ("Le code de retour est %d\n", WEXITSTATUS (status));
 

La fonction wait(), simple d’utilisation, bloque l’exécution du programme jusqu’à ce qu’un processus fils prenne fin ou qu’un signal survienne. La fonction wait4() effectue la même chose en permettant de spécifier des options, en particulier un identifiant (PID) pour attendre la fin d’exécution du processus correspondant. Ces options sont WNOHANG que nous avons utilisé ci-dessus, pour rendre la main même si aucun état de fin d’exécution de processus n’est disponible...

Pour consulter la suite, découvrez le livre suivant :
couv_EI3CACT.png
60-signet.svg
En version papier
20-ecran_lettre.svg
En version numérique
41-logo_abonnement.svg
En illimité avec l'abonnement ENI
130-boutique.svg
Sur la boutique officielle ENI
Précédent
Lancer un script Perl
Suivant
Récupérer la sortie standard d'un programme