Si l'argument de la famille de fonctions `exec` (par exemple, `execl`, `execv`, `execvp`) sous Linux n'est pas exécutable, l'appel `exec` échouera. Le processus ne passera *pas* à l'exécution du fichier spécifié.
Spécifiquement:
* `errno` sera défini : La variable globale `errno` sera définie pour indiquer l'erreur. La valeur la plus probable sera « ENOEXEC » (Erreur de format exécutable), ce qui signifie que le fichier n'est pas un exécutable valide pour l'architecture actuelle, ou « EACCES » (Autorisation refusée), ce qui signifie que le processus n'a pas l'autorisation d'exécuter le fichier (même s'il s'agit d'un exécutable valide). D'autres erreurs sont possibles en fonction des circonstances spécifiques (comme le fichier introuvable, `ENOENT`).
* Le processus initial continue : Le processus d'origine *continuera* son exécution. L'appel `exec` renverra -1 et le programme poursuivra son exécution à partir du point suivant l'échec de l'appel `exec`. C’est crucial; cela ne met pas fin au processus. Votre code doit vérifier la valeur de retour de « exec » pour gérer cette erreur avec élégance. Ignorer simplement la valeur de retour peut conduire à des bogues subtils et difficiles à déboguer.
Exemple (C) :
```c
#include
#include
#include
#include
int main() {
int ret =execl("./nonexistent_program", "nonexistent_program", NULL);
si (ret ==-1) {
fprintf(stderr, "échec de l'exécution :%s\n", strerror(errno));
renvoyer 1 ; // Indique une erreur
}
// Cette ligne ne sera atteinte que si execl réussit (ce qui ne sera pas le cas dans cet exemple)
printf("Ceci ne doit pas être imprimé.\n");
renvoie 0 ;
}
```
Ce code tente d'exécuter un programme inexistant. L'appel `execl` échouera, `errno` sera défini (probablement sur `ENOENT`), `strerror(errno)` donnera un message d'erreur lisible par l'homme, et le programme imprimera l'erreur et quittera avec un statut différent de zéro. Si le fichier existait mais ne disposait pas de l'autorisation d'exécution, « errno » serait probablement « EACCES ».
En bref, un échec d'appel `exec` en raison d'un fichier non exécutable est une erreur d'exécution qui doit être gérée explicitement dans votre programme pour éviter un comportement inattendu. Vérifiez toujours la valeur de retour de « exec » et gérez les erreurs de manière appropriée.
|