Liinux:进程程序替换

news2024/11/17 2:54:48

替换原理
用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用exec前后该进程的id并未改变。

替换函数
其实有六种以exec开头的函数,统称exec函数:

#include <unistd.h>`


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

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

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

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

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

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

·这些函数如果调用成功则加载新的程序从启动代码开始执行,不再返回。
·如果调用出错则返回-1
·exec函数只有出错的返回值而没有成功的返回值。

这些函数原型看起来很容易混,但只要掌握了规律就很好记

·l(list) : 表示参数采用列表
·v(vector) : 参数用数组
·p(path) : 有p自动搜索环境变量PATH
·e(env) : 表示自己维护环境变量

    3 int main()                          
    4 {                                          
    5      char *const argv[] = {"ps", "-ef", NULL};                         
    6      char *const envp[] = {"PATH=/bin:/usr/bin", "TERM=console", NULL};
    7      execl("/bin/ps", "ps", "-ef", NULL);                              
    8      // 带p的,可以使用环境变量PATH,无需写全路径 
    9      execlp("ps", "ps", "-ef", NULL);             
   10      // 带e的,需要自己组装环境变量        
   11      execle("ps", "ps", "-ef", NULL, envp);
   12      execv("/bin/ps", argv);               
   13                                               
   14      // 带p的,可以使用环境变量PATH,无需写全路径 
   15      execvp("ps", argv);                          
   16      // 带e的,需要自己组装环境变量     
   17      execve("/bin/ps", argv, envp);     
   18      exit(0);                           
   19 }  

事实上,只有execve是真正的系统调用,其它五个函数最终都调用 execve,所以execve在man手册 第2节,其它函数在man手册第3节。这些函数之间的关系如下图所示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1818089.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java常用的设计模式,如单例模式、工厂模式、观察者模式等

设计模式是软件工程中的一种解决方案&#xff0c;用于应对常见的设计问题和挑战。它们提供了一种标准化的方式来解决设计难题&#xff0c;使代码更加灵活、可扩展和易于维护。 单例模式&#xff08;Singleton Pattern&#xff09; 概述 单例模式确保一个类只有一个实例&…

Lua解释器裁剪

本文目录 1、引言2、文件功能3、选择需要初始化的库4、结论 文章对应视频教程&#xff1a; 已更新。见下方 点击图片或链接访问我的B站主页~~~ Lua解释器裁剪&#xff0c;很简单~ 1、引言 在嵌入式中使用lua解释器&#xff0c;很多时候会面临资源紧张的情况。 同时&#xff0c…

木头姐预测:2029年特斯拉股价将达2600美元,市值8.2万亿美元

ARK预计特斯拉将在未来两年内推出robotaxi服务&#xff0c;并估计到2029年特斯拉近90%的市值和盈利将归功于robotaxi业务。此外研究表明&#xff0c;FSD模式下的特斯拉比人类驾驶的特斯拉安全约5倍&#xff0c;比道路上的普通汽车安全约16倍。 北京时间12日晚&#xff0c;木头姐…

如何识别和管理软件测试风险?

TestComplete 是一款自动化UI测试工具&#xff0c;这款工具目前在全球范围内被广泛应用于进行桌面、移动和Web应用的自动化测试。 TestComplete 集成了一种精心设计的自动化引擎&#xff0c;可以自动记录和回放用户的操作&#xff0c;方便用户进行UI&#xff08;用户界面&…

通用大模型和垂直大模型,如何选择?

通用大模型和垂直大模型在多个方面存在显著的区别。就像生活中的全才能手和行业里的高精专家&#xff0c;各有千秋&#xff0c;各有魅力。从专业角度分析&#xff0c;他们有以下这些区别&#xff1a; 1.定义与特点&#xff1a; 通用大模型&#xff1a; 是一…

跨界合作机会:通过淘宝数据挖掘潜在的合作伙伴与市场拓展方向

淘宝平台汇聚了众多商家和消费者&#xff0c;生成了大量的交易数据&#xff0c;这些数据为商家提供了挖掘跨界合作机会和市场拓展方向的丰富线索。以下是如何利用淘宝数据来寻找潜在的合作伙伴和探索新的市场机会的一些策略&#xff1a; 消费者行为分析&#xff1a;通过跟踪消费…

1.Element的table表高度自适应vue3+js写法

解决方法 在页面table上添加id&#xff0c;动态计算每页table的最大高度 &#xff0c;将高度保存在store中&#xff0c;每次切换路由时进行计算。 文章目录 解决方法前言一、页面table使用二、store状态库1.引入库 效果 前言 提示&#xff1a;状态管理使用的是pinia,用法参考…

湿气难除?可能是方法用错了!看完这篇,精准祛湿!

立夏过后&#xff0c;你是不是也经常有这样的感觉&#xff1a; 早上睡不醒&#xff0c;越睡越累 脑袋变得沉沉甸甸 手脚像灌了铅&#xff0c;抬不起胳膊&#xff0c;迈不开步子 面对一桌美味也没有胃口 脸上还容易冒油、长痘&#xff0c;浑身有湿漉漉、黏糊糊的感觉&a…

Pikachu上的CSRF以及NSSCTF上的[NISACTF 2022]bingdundun~、 [SWPUCTF 2022 新生赛]xff

目录 一、CSRF CSRF(get) login CSRF(post) CSRF Token 二、CSRF的相关知识点 &#xff08;1&#xff09;什么是CSRF&#xff1f; &#xff08;2&#xff09;工作原理 &#xff08;3&#xff09;CSRF漏洞形成的条件 1、用户要在登录状态&#xff08;即浏览器保存了该…

【python】else与循环的搭配使用

看代码时发现的一种写法&#xff0c;学习一下。 1.for1&#xff09;break2&#xff09;no break 2.while1&#xff09;break2&#xff09;no break 几乎所有语言中&#xff0c;else的常用搭配就是if&#xff0c;而在python中else还可以和循环搭配使用&#xff0c;让代码更加pyt…

胡海建以“限时速运”填补市场空白,让跨越速运顺利突围

作为现代经济体系的重要支柱&#xff0c;物流行业近年来呈现出蓬勃发展的态势。各大物流企业也在竞争中不断向前。其中&#xff0c;跨越速运以“当天达”“次日达”“隔日达”三大跨省时效产品被广为认可。这背后&#xff0c;是跨越速运董事长胡海建对“限时速运”的精准把握。…

开源项目-Docker部署学之思管理系统

开源-Docker部署学之思管理系统 文章目录 开源-Docker部署学之思管理系统资源列表基础环境一、安装Docker二、配置加速器三、查看Docker版本四、Git获取源码五、编辑SQL脚本六、访问管理系统如果访问或者登录的时候出现内部服务错误&#xff0c;评论或私信&#xff0c;我给你解…

vue-pdf-embed 跨域(配置nginx允许跨域)

业务中有个功能需要实现预览pdf&#xff0c;使用了vue-pdf-embed。预览跨域报错。 原nginx路径配置 nginx需要增加跨域处理 增加这一行代码add_header Access-Control-Allow-Origin *; location /files/ {add_header Access-Control-Allow-Origin *;alias C:/uploadFile/; }

B端系统导航有哪些类型?本文告诉你7个常用的。

B端系统相对与C端来说&#xff0c;功能复杂&#xff0c;信息量大&#xff0c;流程负复杂&#xff0c;层级深&#xff0c;这个时候到就显得尤为重要了&#xff0c;直接关乎用户体验&#xff0c;本文大美B端工场带领大家看看这个问题。 一、导航对于B端系统的重要性 导航在B端系…

unity 打包PC安装包中常见文件的功能

目录 前言 一、打包好的文件 二、常用文件 1.文件夹XXX_Data 2.文件夹MonoBleedingEdge 3.文件夹XXX_Data内部 三、文件的应用 1.如果你替换了一个图片 2.如果你新增了或减少了图片和资源 3.场景中有变动 4.resources代码加载的资源改了 5.如果你代码替换了 四、作…

【笔记】【Git】多个dev分支合并到master分支的文件冲突

问题描述 多个dev分支在同步开发,同时发起代码评审,但合入master的时候存在先后顺序,那么后面同文件的操作则会提示“合并有文件冲突”,导致代码无法入库,只能重新提交。 在个人分支中如何解决与master分支差异,从何顺利提交评审合入代码? 参考方案 1、按照下面的流程…

智慧煤矿中的视觉分析:高效的下料口堵塞检测方案

随着工业4.0的推进&#xff0c;智慧煤矿逐渐成为煤炭行业的重要发展方向。智慧煤矿通过引入物联网、大数据、人工智能等技术&#xff0c;实现了矿井作业的自动化和智能化&#xff0c;从而提高了生产效率和安全水平。在智慧煤矿的运营过程中&#xff0c;下料口堵塞是一个常见且严…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 团队派遣(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍓OJ题目截图 📎在线评测链接 团队派遣(100分) 🌍 评测功能需要订阅专栏…

硬核:浏览器发展的四大方向,早把C/S挤到犄角旮旯了。

浏览器是互联网的基础设施&#xff0c;浏览器早不满足于作为上网入口&#xff0c;而是全面进化啦&#xff0c;比如各类应用开始web化&#xff0c;同时浏览器也被分装到桌面应用中去&#xff0c;本文就给大家分享一下浏览器发展的四大方向。 方向一&#xff1a; 传统桌面浏览器…

一文读懂Web Codecs API:浏览器背后的媒体魔术师

引言 ​在早期的Web 网页中&#xff0c;视频播放通常要依靠 Flash 和 Silverlight 等插件来完成&#xff0c;浏览器是不支持直接播放视频的。 随着网络技术的发展&#xff0c;视频这种媒体方式的需求变得普遍&#xff0c;HTML5中&#xff0c;出现了一个新的元素Video&#xf…