#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?
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.
La famille de fonctions exec () remplace l'image de processus actuelle par une nouvelle image de processus.