一、exec函数族

有的时候需要在一个进程里面执行其他的命令或者是用户自定义的应用程序,此时就用到了exec函数族当中的函数。
使用方法一般都是在父进程里面调用fork创建处子进程,然后在子进程里面调用exec函数。

二、exec函数族实现原理图

比如在子进程中执行ls -l命令: alt
子进程在执行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函数一般是执行系统自带的程序或者是命令.