| Als het argument voor de `exec`-familie van functies (bijvoorbeeld `execl`, `execv`, `execvp`) in Linux niet uitvoerbaar is, zal de `exec`-aanroep mislukken. Het proces zal *niet* overschakelen naar het uitvoeren van het opgegeven bestand.
Specifiek:
* `errno` wordt ingesteld: De globale variabele `errno` wordt ingesteld om de fout aan te geven. De meest waarschijnlijke waarde is `ENOEXEC` (fout met uitvoerbaar formaat), wat betekent dat het bestand geen geldig uitvoerbaar bestand is voor de huidige architectuur, of `EACCES` (Toestemming geweigerd), wat betekent dat het proces geen toestemming heeft om het bestand uit te voeren (zelfs als het een geldig uitvoerbaar bestand is). Andere fouten zijn mogelijk afhankelijk van de specifieke omstandigheden (zoals het bestand dat niet wordt gevonden, `ENOENT`).
* Het oorspronkelijke proces gaat verder: Het oorspronkelijke proces *blijft* actief. De `exec`-aanroep zal -1 retourneren, en het programma zal doorgaan met de uitvoering vanaf het punt na de mislukte `exec`-aanroep. Dit is cruciaal; het beëindigt het proces niet. Uw code zou de geretourneerde waarde van `exec` moeten controleren om deze fout correct af te handelen. Het simpelweg negeren van de retourwaarde kan leiden tot subtiele en moeilijk te debuggen bugs.
Voorbeeld (C):
```c
#include
#include
#include
#include
int hoofd() {
int ret =execl("./nonexistent_program", "nonexistent_program", NULL);
als (ret ==-1) {
fprintf(stderr, "execl mislukt:%s\n", strerror(errno));
retour 1; // Geef een fout aan
}
// Deze regel wordt alleen bereikt als execl slaagt (wat in dit voorbeeld niet het geval is)
printf("Dit mag niet worden afgedrukt.\n");
retour 0;
}
```
Deze code probeert een niet-bestaand programma uit te voeren. De `execl`-aanroep zal mislukken, `errno` zal worden ingesteld (waarschijnlijk op `ENOENT`), `strerror(errno)` zal een voor mensen leesbare foutmelding geven, en het programma zal de fout afdrukken en afsluiten met een status die niet nul is. Als het bestand bestond maar geen uitvoerrechten had, zou `errno` waarschijnlijk `EACCES` zijn.
Kortom, een mislukte `exec`-aanroep vanwege een niet-uitvoerbaar bestand is een runtimefout die expliciet binnen uw programma moet worden afgehandeld om onverwacht gedrag te voorkomen. Controleer altijd de geretourneerde waarde van `exec` en handel fouten op de juiste manier af. |