* Reemplazo, no ejecución: `Exec` no * ejecuta * un nuevo programa en el sentido tradicional. * Reemplaza * la imagen del proceso actual con la imagen del nuevo programa. Esto significa que el proceso original esencialmente desaparece, y el nuevo programa toma su lugar.
* Transferencia de control directo: La llamada del sistema `Exec` transfiere directamente el control al nuevo programa sin volver a la persona que llama. Es como si el proceso original estuviera "intercambiado" por el nuevo.
Ejemplo:
`` `C
#Include
int main () {
// Intenta reemplazar el proceso actual con "LS -L"
if (execlp ("ls", "ls", "-l", null) ==-1) {
// solo alcanza esto si EXECLP falla
Perror ("EXECLP falló");
regresar 1;
}
// Esta línea nunca será alcanzada
printf ("Esto nunca se imprimirá. \ n");
regresar 0;
}
`` `` ``
Por qué `Exec` es útil
* Eficiencia: Evita la sobrecarga de crear un nuevo proceso y administrar su espacio de memoria.
* Control directo: Proporciona un mecanismo para que un proceso haga una transición sin problemas a otro programa.
Puntos clave
* `Exec` variantes (` execl`, `execv`,` execlp`, `execvp`) todos tienen el mismo comportamiento en términos de valores de retorno.
* Si `Exec` falla (por ejemplo, archivo no encontrado, problemas de permiso), devuelve` -1` y establece `errno` para indicar el error.
* Para que un programa ejecute otro y luego continúe, debe usar `Fork` para crear un proceso infantil antes de llamar a` exec` en el niño.
¡Avíseme si tiene alguna otra pregunta sobre `ejecutivo 'o procesos en UNIX!