#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;
}
据我所知,创建了一个子进程,因为fork返回的pid是&#34; 0&#34;,它进入包含execlp的块并执行它,然后父进程等待直到孩子退出然后打印&#34;孩子完成&#34;。如果我错了,请纠正我。但我不明白execlp()在这里是如何工作的。有人可以解释一下吗?
答案 0 :(得分:19)
fork
创建一个新进程,由父进程调用一次,但在父进程和子进程中返回两次。
在子进程中,调用execlp
执行指定的命令ls
。
这将使用新程序文件(ls
程序文件)替换子进程,这意味着以下内容。
当进程调用execlp
或其他7个exec
函数之一时,该进程完全被新程序替换,新程序开始在其主程序中执行
功能。
进程ID在exec
内不会发生变化,因为新进程不会发生变化
创建。
exec
仅替换当前进程的文本,数据,堆和堆栈
来自磁盘的全新程序。
在某些操作系统上,fork
后跟exec
的组合称为spawning a new process
。
希望它或多或少清楚。如果您有更多问题,请与我们联系。
答案 1 :(得分:1)
exec()函数系列替换当前的过程映像 一个新的过程图像。