gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:47:40 24 4
gpt4 key购买 nike

#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的 block 并执行它,然后父进程等待子进程退出然后打印“ child 完整”。如果我错了,请纠正我。但我不明白 execlp() 在这里是如何工作的。有人能解释一下吗?

最佳答案

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

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

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

当一个进程调用 execlp 或其他 7 个 exec 函数之一时,该进程将被新程序完全取代,并且新程序开始在它的位置执行。主要的功能。

进程 ID 在 exec 中不会改变,因为新进程不会发生变化。创建的。exec 仅替换当前进程的文本、数据、堆和堆栈使用磁盘上的全新程序进行分段。

在某些操作系统上,forkexec 的组合称为生成新进程

希望它或多或少是清楚的。如果您还有其他问题,请告诉我。

关于unix - execlp() 系统调用如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25992622/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com