进程控制(2)进程程序替换

进程程序替换

fork() 之后,⽗⼦各⾃执⾏⽗进程代码的⼀部分如果⼦进程就想执⾏⼀个全新的程序呢?进程的程序

替换来完成这个功能!

子进程有自己的代码和数据就会成为真正独立的进程。

程序替换是通过特定的接⼝,加载磁盘上的⼀个全新的程序(代码和数据),加载到调⽤进程的地址空间

中!

4-1替换原理

从磁盘中把要执行的进程的数据和代码加载到内存中,在通过页表映射。

4-2替换函数




关联linux历史知识

1.ls -l -a -l 运行过程

是由父进程bash运行fork()函数,创建子进程,子进程运行execl类函数把子进程替换成要执行的程序,父进程waitpid回收子进程。

2.二进制文件先要加载到内存中,这是由冯曼一诺体系决定,那么你的进程数据和代码是如何加载到内存中的?

excel函数就充当加载器

其他execl

其实有六种以exec开头的函数,统称exec函数:

cpp 复制代码
#include <unistd.h>
int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg, ...,char *const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execve(const char *path, char *const argv[], char *const envp[]);

这些函数如果调⽤成功则加载新的程序从启动代码开始执⾏,不再返回。

• 如果调⽤出错则返回 -1

• 所以 exec 函数只有出错的返回值⽽没有成功的返回值。

• l(list) :表⽰参数采⽤列表

• v(vector) :参数⽤数组

• p(path) :有 p ⾃动搜索环境变量 PATH

• e(env) :表⽰⾃⼰维护环境变量

相关推荐
liang_jy3 小时前
内存管理(七)—— 内存映射
面试·操作系统
liang_jy4 小时前
内存管理(六)—— 进程的内存映像
面试·操作系统
冰封之寂4 小时前
Docker 资源管理终极指南:CPU、内存与 IO 的精细化控制
linux·运维·服务器·docker·云计算
xiaoye-duck4 小时前
《Linux系统编程》Linux 系统多线程(五):<线程同步与互斥>线程互斥(上):从条件变量到生产者消费者模型详解
linux·线程
一叶龙洲6 小时前
向日葵远程Ubuntu,支持隐私屏
linux·运维·ubuntu
酷可达拉斯6 小时前
Linux操作系统-shell编程之Grep与正则表达式
linux·运维·服务器·正则表达式·centos
寒水馨7 小时前
Linux下载、安装llama.cpp-b10068(附安装包llama-b10068-bin-ubuntu-vulkan-x64.tar.gz)
linux·ubuntu·llm·llama·本地部署·llama.cpp·推理引擎
我星期八休息9 小时前
网络编程—UDP与TCP
linux·运维·网络·数据库·网络协议·tcp/ip·udp
ziguo112210 小时前
C/C++ 错误处理全解:从 errno 到 C++ 异常
linux·c语言·c++·windows·visual studio
三84411 小时前
使用Samba/NFS实现文件共享/自动挂载共享目录/autofs自动挂载服务
linux·服务器·网络