进程替换,不是创建一个新进程,而是将一个运行的进程替换为其他进程执行;PCB使用原进程的,只进行修改。并且,进程替换是与进程复制配合进行的。

在进程复制时,我们根据fork()的返回值对父子进程进行区分,使其进行不同操作。在使用进程替换后,我们就可以使新进程更加直接的执行我们想要做的操作。进程复制时,父子进程代码相同,父子进程要进行的操作在同一份代码中,根据逻辑判断才进行区分。对于父进程来说,子进程要执行操作的代码就是冗余的。使用进程替换,我们就可以将想要执行的新操作封装在一个新程序中,在原进程中只用调用进程替换函数,替换为新进程执行就可以了。

1、exec系列六个函数

函数中的“l” 指 进程运行所需参数需要全部罗列出,如:execl("/bin/ps","ps","-f",(char*)0)。//(char*)0或NULL是参数结束的标志。

函数中的“v”指 进程运行所需参数封装后传入,如:char* buff[]={"ps","-f",(char*)0},execv("/bin/ps",buff);

函数中的“p“指 该可执行程序的路径在系统环境变量PATH中存在,系统去PATH中寻找路径,查找可执行文件。

函数中的“e”指 环境变量,可从父进程中的main函数继承得到,也可以自设。

1.1、execl函数

int execl(const char* path, const char * arg,...);

以替换为 ps 命令为例:

第一个参数为 可执行程序的路径+程序名,后续为所需参数,程序名也是参数之一。execl若执行成功,则进程替换为 ps 命令执行;若不成功,则执行perror,输出当前错误信息。

在执行a程序后,进程替换为ps,完成了ps -f命令的功能。

1.2、execlp函数

int execlp(const char* file, const char * arg,...);

file为可执行文件名,无需给出路径,系统根据系统环境变量中的PATH路径,查找可执行文件。 后续参数仍需可执行文件名。

对于系统命令,可以直接使用;对于用户自定义文件,不在系统路径下,就需要将路径赋值到$PATH中(export PATH=$PATH:.,将当前路径加入PATH)。

1.3、execle函数

int execle(const char* path, const char * arg,...,char* const envp[]);

execle只相较于execl多了envp,envp为环境变量数组,可以自定义,也可以从父进程继承得到。

1.4、execv函数

int execv(const char * path, char* const argv[]);

path为可执行文件的路径(包括文件名),argv为封装起来的参数数组。

1.5、execvp函数

int execvp(const char * file, char* const argv[]);

可执行程序名+封装参数。

1.6、execve函数

int execve(const char * path, char* const argv[],char* const envp[]);

execl,execlp,execle,execv,execvp,execvpe都不是系统调用,而是对系统调用的封装。execve才是系统调用。int execve(const char* filename,char* const argv[],char* const envp[])。

2、fork+exec联用

父进程b:

所替换进程main:

argc为参数个数;argv中保存进程运行所需参数,也是父进程中传入的参数集。

运行结果:

进程替换exec系列函数相关推荐

  1. execlp使用例子_linux系统编程之进程(五):exec系列函数(execl,execlp,execle,execv,execvp)使用...

    本节目标: exec替换进程映像 exec关联函数组(execl.execlp.execle.execv.execvp) 一,exec替换进程映像 在进程的创建上Unix采用了一个独特的方法,它将进程 ...

  2. linux系统编程之进程(五):exec系列函数(execl,execlp,execle,execv,execvp)使用

    本节目标: exec替换进程映像 exec关联函数组(execl.execlp.execle.execv.execvp) 一,exec替换进程映像 在进程的创建上Unix采用了一个独特的方法,它将进程 ...

  3. Linux exec 系列函数:execl execv等

    Linux exec 系列函数:execl execv等 1. exec函数族 1.1 exec 重要说明!!! 1.2 使用exec函数族主要有两种情况: 2. exec函数族共有6种不同形式的函数 ...

  4. exec系列函数(execl、execlp、execle、execv、execvp)使用

    一.exec 替换进程映像 在进程的创建上 Unix 采用了一个独特的方法,它将进程创建与加载一个新进程映象二者分离.这样的好处是有更多的余地对两种操作进行管理. 当我们创建了一个进程之后,通常将子进 ...

  5. exec系列函数(execl,execlp,execle,execv,execvp)使用

    一.exec替换进程映像 在进程的创建上Unix采用了一个独特的方法,它将进程创建与加载一个新进程映象分离.这样的好处是有更多的余地对两种操作进行管理. 当我们创建了一个进程之后,通常将子进程替换成新 ...

  6. 使用vfork、exec系列函数、wait/waited实现system函数的功能

    使用vfork.exec系列函数.wait/waited实现system函数的功能 #include <stdio.h> #include <string.h> #includ ...

  7. 【Linux】exec()系列函数——execl(),execlp(),execle()等的区别

    l和v二选一,为必备项 l表示参数可变长,以一个空指针结尾 v表示参数直接用一个指针的数组列出,最后一个指针同样需要为空指针 p可选 有p表示函数的第一个参数可以单用可执行文件名,这样系统会在环境变量 ...

  8. linux 进程函数替换,Linux使用exec函数实现进程替换的代码分享

    这篇文章主要介绍了Linux 进程替换(exec函数)实现代码的相关资料,需要的朋友可以参考下 Linux 进程替换(exec函数)实现代码# include #include #include #i ...

  9. Linux进程编程(PS: exec族函数、system、popen函数)

    目录 1.进程相关概念 程序和进程 查看系统中的进程 ps指令 top指令 进程标识符 使用getpid()获取 父进程,子进程 2.创建进程fork 进程创建发生了什么--C程序的存储空间如何分配 ...

最新文章

  1. 【Linux】在VirtualBox-6.0中安装Manjaro18.0
  2. 1小时生成无限玩法,GPT-3加持的密室逃脱,让游戏策划师感受到了职场危机
  3. JavaScript知识精简
  4. python编写爬虫的步骤-用Python编写一个简单的爬虫
  5. 13. PDE_PTE属性
  6. 关于springboot工具类中@Autowired注入bean,用static直接修饰,静态方法使用bean时报空指针异常错误...
  7. Boltzmann Machine 入门(2)
  8. 32页,10米长的《BI建设地图》强在哪?我整理分享出来
  9. 解封装(二):初始化解封装avformat_open_input,各参数分析,以及简单流程
  10. 新零售讲堂之时代下的传统零售业,何去何从?
  11. 前后端分离djangorestframework—— 接入支付宝支付平台
  12. 「leetcode」1207. 独一无二的出现次数:【数组在哈希法中的经典应用】详解
  13. 步进电机工作原理 驱动 _28BYJ-48 以及程序实例下载
  14. 大数据发展的根基是什么?
  15. 总结Android各类常用三方框架
  16. 阿里云文本内容审核服务入门~
  17. 双网卡实现同时上内外网方法
  18. 程序的本质之一程序编译的详细过程
  19. Caused by: java.net.BindException: Address already in use: bind
  20. 一元三次方程求根公式推导

热门文章

  1. 数据挖掘领域实用Github项目推荐
  2. 19款高端大气企业网站模版
  3. 复现Nature子刊Whittaker生物群系图
  4. audioread函数未定义_iOS音频-audioUnit总结
  5. 李书福:马化腾天天看我们的微信,商业机密泄露很苦恼
  6. overflow-wrap详解
  7. html js 数组添加元素吗,js数组添加元素的几种方法
  8. 软件测试之数据库面试题
  9. spark pairRDD操作
  10. mysql text操作_Mysql使用text添加大文本