exec 函数族 - 进程替换
exec 函数族基本概念
函数族的概念
函数名不同,实现的功能相同或相似的函数
作用
exec 函数族的作用是根据指定的文件名或者路径找到可执行文件,可在进程内部执行一个可执行文件,这将会取代原本调用进程的内容
返回值
exec 函数族的函数执行成功后不会返回【因为原进程内容被替换了】,失败时返回 -1 ,然后从原程序的调用点接着往下执行
工作原理
从虚拟地址空间角度来看,内核区中进程id等信息不变,而用户区中的代码段等数据将改成exec参数中的可执行程序的数据
具体函数
execl, execlp, execle, execv, execvp, execvpe
#include <unistd.h>
extern char **environ;
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 execvpe(const char *file, char *const argv[],char *const envp[]);
常用函数解析
execl
- int execl(const char *path, const char *arg, ...);
参数 :
- path : 需要指定执行的文件路径或名称
- arg : 字符串,表示执行指定可执行文件的参数(不止一个)
【第一个参数一般没有作用,通常写执行的程序名称,从第二个参数开始将作为执行程序的参数列表,而最后要以 NULL 结尾】
execlp
- int execlp(const char *file, const char *arg, ...);
区别 :execlp 函数将会在当前环境变量中对指定文件名进行查找,若指定文件为被配置为环境变量则查找不到(shell命令通常配置为环境变量)
参数 :
- file : 需要执行的可执行文件名
- arg : 与 execl 一致
更多
exec族函数参数极难记忆和分辨,函数名中的字符会给我们一些帮助:
l : 使用参数列表
p:使用文件名,并从PATH环境进行寻找可执行文件
v:应先构造一个指向各参数的指针数组,然后将该数组的地址作为这些函数的参数。
e:多了envp[]数组,使用新的环境变量代替调用进程的环境变量
参考博客 https://blog.csdn.net/u014530704/article/details/73848573
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理