* Sostituzione, non esecuzione: `Exec` non * esegui * un nuovo programma nel senso tradizionale. * Sostituisce * l'immagine del processo corrente con l'immagine del nuovo programma. Ciò significa che il processo originale scompare essenzialmente e il nuovo programma prende il suo posto.
* Trasferimento di controllo diretto: La chiamata di sistema `Exec` trasferisce direttamente il controllo al nuovo programma senza tornare al chiamante. È come se il processo originale fosse "scambiato" con quello nuovo.
Esempio:
`` `c
#include
int main () {
// Tenta di sostituire il processo corrente con "LS -L"
if (execlp ("ls", "ls", "-l", null) ==-1) {
// raggiungi questo solo se ExeClp non riesce
Perror ("Execlp non riuscito");
Ritorno 1;
}
// Questa linea non verrà mai raggiunta
printf ("Questo non verrà mai stampato. \ n");
restituzione 0;
}
`` `
perché `Exec` è utile
* Efficienza: Evita il sovraccarico di creare un nuovo processo e gestire il suo spazio di memoria.
* Controllo diretto: Fornisce un meccanismo per un processo per passare perfettamente a un altro programma.
Punti chiave
* `Exec` Varianti (` Execl`, `Execv`,` Execlp`, `Execvp`) hanno tutti lo stesso comportamento in termini di valori di reso.
* Se `Exec` fallisce (ad es. File non trovato, problemi di autorizzazione), restituisce` -1` e imposta `errno` per indicare l'errore.
* Per far eseguire un programma un altro e quindi continuare, è necessario utilizzare `fork` per creare un processo figlio prima di chiamare` Exec` nel bambino.
Fammi sapere se hai altre domande su "Exec" o processi in Unix!
Informazioni correlate
sistemi © www.354353.com