一、exec函数族
有的时候需要在一个进程里面执行其他的命令或者是用户自定义的应用程序,此时就用到了exec函数族当中的函数。
使用方法一般都是在父进程里面调用fork创建处子进程,然后在子进程里面调用exec函数。
二、exec函数族实现原理图
比如在子进程中执行ls -l命令:
子进程在执行ls命令时,会将ls的代码段(ls也是个程序)替换掉当前进程空间的代码段。从而去执行ls命令。
exec函数是用一个新程序替换了当前进程的代码段、数据段、堆和栈;原有的进程空间没有发生变化,并没有创建新的进程,进程PID没有发生变化。
三、execl函数
函数原型
int execl(const char *path, const char *arg, ... /* (char *) NULL */);
函数参数介绍
- path: 要执行的程序的绝对路径
- 变参arg: 要执行的程序的需要的参数
- arg:占位,通常写应用程序的名字
- arg后面的: 命令的参数
- 参数写完之后: NULL
函数返回值
若是成功,则不返回,不会再执行execl函数后面的代码;若是失败,会执行。
使用情况
execl函数一般执行用户自定义的程序。
四、execlp函数
函数原型、
int execlp(const char *file, const char *arg, .../* (char *) NULL */);
函数参数介绍
- file: 执行命令的名字, 根据PATH环境变量来搜索该命令
- arg:占位
- arg后面的: 命令的参数
- 参数写完之后: NULL
函数返回值
若是成功,则不返回,不会再执行execlp函数后面的代码;若是失败,会执行。
使用情况
execlp函数一般是执行系统自带的程序或者是命令.