execlp()系统调用如何工作?

时间:2014-09-23 10:20:31

标签: unix operating-system exec

#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()在这里是如何工作的。有人可以解释一下吗?

2 个答案:

答案 0 :(得分:19)

fork创建一个新进程,由父进程调用一次,但在父进程和子进程中返回两次。

在子进程中,调用execlp执行指定的命令ls

这将使用新程序文件(ls程序文件)替换子进程,这意味着以下内容。

当进程调用execlp或其他7个exec函数之一时,该进程完全被新程序替换,新程序开始在其主程序中执行 功能。

进程ID在exec内不会发生变化,因为新进程不会发生变化 创建。 exec仅替换当前进程的文本,数据,堆和堆栈 来自磁盘的全新程序。

在某些操作系统上,fork后跟exec的组合称为spawning a new process

希望它或多或少清楚。如果您有更多问题,请与我们联系。

答案 1 :(得分:1)

exec()函数系列替换当前的过程映像        一个新的过程图像。

相关问题