как работает системный вызов 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 completen");
}
return 0;
}
здесь, насколько я мог понять, создается дочерний процесс, и поскольку его pid, возвращаемый fork, равен "0", он входит в блок, содержащий execlp, и выполняет его, а затем родитель ждет, пока ребенок выйдет, а затем печатает"child complete". Пожалуйста, поправьте меня, если я ошибаюсь. Но я не понял, как здесь работает execlp (). Кто-нибудь может это объяснить?
2 ответов
fork
создает новый процесс, он вызывается один раз родителем, но возвращается дважды в родителе и в потомке.
в дочернем процессе разговора execlp
выполняет указанную команду ls
.
это заменяет дочерний процесс новым файлом программы (ls
program file), что означает следующее.
когда процесс вызывает execlp
или один из других 7 exec
функции, этот процесс полностью заменен новым программа, и новая программа начинает выполнять в своей основной
функция.
идентификатор процесса не изменяется через exec
, потому что новый процесс не
создан.
exec
просто заменяет текст, данные, кучу и стек текущего процесса
сегменты с совершенно новой программой с диска.
сочетание fork
следовал по exec
называется spawning a new process
на некоторых операционных системах.
надеюсь, это было более или менее понятно. Дайте мне знать, если у вас больше вопросы.