进程程序替换

本文详细解释了程序替换原理,包括使用exec系列函数(如execl,execlp,execle等)在C++中替换子进程的程序。讨论了进程替换中环境变量的继承和传递方式,以及如何确保新程序的独立运行。
摘要由CSDN通过智能技术生成

目录

单进程的程序替换的代码

理解和掌握程序替换的原理,更改多进程版的程序替换的代码

大量的使用的其他方法--父子进程中

execl

execlp

execle

execv

execvp

execvpe

进程替换中的环境变量


我们所创建的子进程,执行的代码都是父进程的一部分

如果我们想让子进程执行新的程序呢???执行全新的程序和访问全新的数据,不在与父进程有瓜葛---->进程等待

程序替换能替换指令程序,也能替换我写程序

exec* 叫做进程的替换,系统大于一切

单进程的程序替换的代码

我们可以用“语言”调用其他程序

const char *path:我们要替换的新程序->文件->程序文件的路径加文件名

const char *arg,...:如何执行,命令行上怎么写,参数就怎么传,以NULL结尾

列如

我们让子进程执行命令 ls -l -a 

子进程还有一条printf怎么不见了

理解和掌握程序替换的原理,更改多进程版的程序替换的代码

原理

exec*这样的函数,如果执行成功,则后续代码没有机会再去执行了,因为被替换掉了

exec*只有失败的返回值-1,没有成功的返回值->不用判断,只要往后走,就是出错了

大量的使用的其他方法--父子进程中

两个步骤:

a.必须先找到这个可执行程序

b.必须告诉exec* 怎么执行

execl

execlp

execle

execv

execvp

execvpe

进程替换中的环境变量

1.当我们进行程序替换时,子进程对应的环境变量是可以直接从父进程来的

2.环境变量被子进程继承下去是一种默认的行为,不受环境变量影响

程序替换只会替换新程序的代码和数据,环境变量不会被替换(环境变量和命令行参数也是程序的数据

通过地址空间可以让子进程继承父进程的环境变量数据

3.让子进程执行的时候获得环境变量

1.将父进程原封不动传递给子进程(1.直接用 2. 直接传environ)

2,我们想传递自己的环境变量

直接构建环境变量表,给子进程传递(不是新增,而是覆盖式传递)

3.新增传递

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值