web-dev-qa-db-fra.com

comment fonctionne l'appel système execlp ()?

#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>

int main(){
pid_t pid;
pid = fork();
if(pid<0){
   fprintf(stderr, "fork failed");
   return 1;    }
else if(pid == 0){  
   execlp("bin/ls", "ls", NULL);}
else{
   wait(NULL);
   printf("child complete\n");
   }
return 0;
}

Autant que je sache, un processus enfant est créé et, puisque son pid renvoyé par fork est "0", il entre dans le bloc contenant execlp et l'exécute, puis le parent attend que l'enfant quitte et imprime "enfant complet". ". Corrigez-moi si j'ai tort, s'il-vous plait. Mais je n'ai pas compris comment execlp () fonctionne ici. Quelqu'un peut-il expliquer cela?

10
athena

fork crée un nouveau processus, il est appelé une fois par le parent mais est renvoyé deux fois dans le parent et dans l'enfant.

Dans le processus enfant, l'appel execlp exécute la commande spécifiée ls.

Ceci remplace le processus enfant par le nouveau fichier de programme (fichier de fichier ls), qui signifie suivre.

Lorsqu'un processus appelle la execlp ou l'une des 7 autres fonctions exec, ce processus est complètement remplacé par le nouveau programme et le nouveau programme commence à s'exécuter à sa fonction principale.

L'ID de processus ne change pas dans une exec, car aucun nouveau processus n'est créé. exec remplace simplement les segments de texte, de données, de segment de mémoire et de pile du processus actuel par un tout nouveau programme à partir du disque.

La combinaison de fork suivie de exec s'appelle spawning a new process sur certains systèmes d'exploitation.

J'espère que c'était plus ou moins clair. Dites moi si vous avez d'autres questions.

19
deimus

La famille de fonctions exec () remplace l'image de processus actuelle par une nouvelle image de processus.

1
deepak