创建子进程的目的:让子进程执行父进程代码的一部分
但是如何让子进程执行一个全新的程序?
进程的程序替换:进程不变,仅仅替换当前进程的代码和数据,磁盘上的数据加载到内存中
要明白程序的本质就是一个文件 文件=程序代码+程序数据
注意进程替换没有创建新的程序,他只是替换原有的。
替换函数
其实有六种以exec开头的函数,统称exec函数:
只要进程的程序替换成功,就不会执行后续代码,意味着exec函数成功的时候,不需要返回值检测! 只要返回了,就一定是调用失败了
#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[]);
//path:要执行的目标程序的全路径,所在路径/文件名
//arg:要执行的目标程序在命令行上怎么执行,这里参数就怎么一个一个传递进去
//...:可变参数列表
这些函数如果调用成功则加载新的程序从启动代码开始执行,不再返回。
如果调用出错则返回-1
所以exec函数只有出错的返回值而没有成功的返回值。
后缀的含义:
l(list) : 表示参数采用列表
v(vector) : 参数用数组
p(path) : 有p自动搜索环境变量PATH
e(env) : 表示自己维护环境变量