#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 为“0”,因此它进入包含 execlp 的块并执行它,然后父进程等待子进程退出,然后打印“childcomplete” ”。如果我错了,请纠正我。但我不明白 execlp() 在这里是如何工作的。有人可以解释一下吗?
fork
创建一个新进程,它被父进程调用一次,但在父进程和子进程中返回两次。
在子进程中调用execlp
执行指定的命令ls
.
这将用新的程序文件替换子进程(ls
程序文件),这意味着以下。
当一个进程调用execlp
或其他 7 个之一exec
函数,该进程完全被新程序取代,新程序开始在其主程序中执行
功能。
进程 ID 不会随时间变化exec
,因为新进程不是
创建的。exec
仅替换当前进程的文本、数据、堆和堆栈
使用磁盘中的全新程序进行分段。
的组合fork
其次是exec
叫做spawning a new process
在某些操作系统上。
希望它或多或少是清楚的。如果您还有其他问题,请告诉我。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)