目录
作者和朋友建立的社区:非科班转码社区-CSDN社区云💖💛💙
期待hxd的支持哈🎉 🎉 🎉
最后是打鸡血环节:你只管努力,剩下的交给天意🚀 🚀 🚀
最近作者和好久建立了一个公众号
公众号介绍:
专注于自学编程领域。由USTC、WHU、SDU等高校学生、ACM竞赛选手、CSDN万粉博主、双非上岸BAT学长原创。分享业内资讯、硬核原创资源、职业规划等,和大家一起努力、成长。(二维码在文章底部哈!)
什么是进程程序替换
我们现在知道,fork出来的子进程是执行父进程的代码片段,但是如果我们想要创建出来的子进程,执行其他的程序呢?这就需要进程的程序替换了。
为什么有进程程序替换
我们一般在Linux编程的时候,往往只需要子进程干两种事情
1. 让子进程执行父进程的代码片段(服务器代码)
2. 让子进程执行磁盘中一个权限的程序(shell,想让客户端执行对应的程序,通过我们得到进程,执行其他人写的进程代码等(c/c++/python/java/php/shell...))
注意
进程程序替换的时候是没有创建新进程的
程序替换原理(由OS完成,我们需要进行系统调用)
1. 将磁盘中的程序,加载入内存结构
2. 重新建立页表映射,谁执行程序替换,就重新建立谁的映射(子进程)
效果:让我们的父进程和子进程彻底分离,并让子进程执行一个全新的程序
替换原理
用 fork 创建子进程后执行的是和父进程相同的程序 ( 但有可能执行不同的代码分支 ), 子进程往往要调用一种 exec 函数以执行另一个程序。当进程调用一种exec 函数时 , 该进程的用户空间代码和数据完全被新程序替换 , 从新程序的启动例程开始执行。调用exec 并不创建新进程 , 所以调用 exec 前后该进程的 id 并未改变![]()
如何进行进程程序替换
调用的时候注意以NULL结尾
注意只有下面那个才是系统接口,其他(上面6个)都是基于应用场景的封装
函数小结
这些函数如果调用成功则加载新的程序从启动代码开始执行,不再返回。如果调用出错则返回-1所以exec函数只有出错的返回值而没有成功的返回值。l(list):表示参数采用列表
v(vector):参数用数组
p(path):有p表示自动搜索环境变量PATH
e(env):表示自己维护环境变量
注意是覆盖式(覆盖PATH)的。所以如果要添加环境变量就需要之间在外面
进行 export envname
记忆方法
最后的最后,创作不易,希望读者三连支持💖
赠人玫瑰,手有余香💖