Linux基础之进程替换

目录

一、进程替换的基本概念

二、exec系列函数

2.1 execl系列函数

2.2 execv系列函数 

2.3 替换原理


一、进程替换的基本概念

       根据我们之前所学,我们可以知道我们所创建的所有的子进程,执行的代码,都是父进程代码的一部分。如果我们想让子进程去执行新的程序呢??-----执行全新的代码和访问全新的数据,不在和父进程有瓜葛------ 而这一过程就可以理解为程序替换。

        那么接下来,本节内容将围绕各种实现进程替换的接口进行讲解。

二、exec系列函数

       当我们想要进行程序替换时,就需要使用到该系列函数,那么接下来,让我们看看,该系列函数都有些什么吧。

这里一共有六个函数,看起来好像很麻烦的样子,实际上只要你理解其中的含义,就很容易了。

2.1 execl系列函数

根据上面的图,我们来对execl的待传参数进行解析。

execl()  ---   ... 叫做可变参数列表 
对于其第一个参数(const char* path)表示我们要替换的程序的程序文件路径+文件名(要执行,就得先找到)
第二个参数(解决如何执行的问题)程序名+参数 
样例  execl("/usr/bin/ls","ls","-a","-l",NULL)   --- 需要以NULL结尾

那么接下来,我们写一段具体的代码来试一试吧。

看一下运行结果:

很明显,我们完成了我们想要完成的指令的内容,但是我们后面的printf却并没有输出任何东西,这里说明:

exec*这样的函数,如果当前进程执行成功,则后续代码没有机会在执行了,因为被替换掉了。(一旦失败,则会执行后续)

exec*只有失败的返回值,没有成功的返回值。

我们再来看看其他execl系列的函数:
execlp  ---    我们现在大概理解了 execl 代表的时什么意思,那这个后面的p是什么意思呢?
不难发现,我们刚刚在传参的时候,传入了具体的路径,/usr/bin/ls ,而p则代表的系统会帮我们导入当前环境的环境变量PATH,这样就能简化我们的传参内容。
继续写一段代码来试试:


很明显,执行结果也是没有问题的,这里可能有人会问,为什么我所传入的参数有两个 “ls” ,这第一个 ls 代表是要进行程序替换的指定文件名(路径虽然有了,但是你也需要告诉系统是去哪个文件中执行哪个命令吧),那么第二个就是要执行的命令咯。

来到我们的第三个函数 --- execle

这个e带表的是什么呢? --- 其其实代表的是环境变量,也就是说可以传入一个自己的环境变量。关于这里,大家可以自行尝试尝试。

2.2 execv系列函数 

相较于 execl(我们可以将 l 理解为 list)--- execv 中的v 代表的是一个数组,其内容其实就是存的我们 list 所传的东西,写段代码给大家看看就能理解了。

那么剩下的相信大家通过对execl的学习,是可以自己掌握的了,这里我就不过多的赘述了。

2.3 替换原理

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IP隔离是什么,你了解多少?

一、IP地址隔离的概念和原理 当我们谈论 IP 地址隔离时,我们实际上是在讨论一种网络安全策略,旨在通过技术手段将网络划分为不同的区域或子网,每个区域或子网都有自己独特的 IP 地址范围。这种划分使网络管理员可以更精细地控制哪些设备或用…

基于java的英文翻译字典

基于java的英文翻译字典,附有源代码,源数据库初始化文件 源码地址 dict_demo: 提取一段英文对话中的英文词汇,输出为英文单词字典形式 解析json字条 private void readFile(String pathname) {long start System.currentTimeMillis(); //…

学习笔记——路由网络基础——路由优先级(preference)

1、路由优先级(preference) 路由优先级(preference)代表路由的优先程度。当路由器从多种不同的途径获知到达同一个目的网段的路由(这些路由的目的网络地址及网络掩码均相同)时,路由器会比较这些路由的优先级,优选优先级值最小的路由。 路由来源的优先…

Goby 漏洞发布|XAMPP Windows PHP-CGI 代码执行漏洞

漏洞名称:XAMPP Windows PHP-CGI 代码执行漏洞 English Name:XAMPP PHP-CGI Windows Code Execution Vulnerability CVSS core: 9.8 漏洞描述: PHP是一种在服务器端执行的脚本语言,在 PHP 的 8.3.8 版本之前存在命令执行漏洞,由于 Window…

SpringMVC框架学习笔记(七):处理 json 和 HttpMessageConverter 以及文件的下载和上传

1 处理 JSON-ResponseBody 说明: 项目开发中,我们往往需要服务器返回的数据格式是按照 json 来返回的 下面通过一个案例来演示SpringMVC 是如何处理的 (1) 在web/WEB-INF/lib 目录下引入处理 json 需要的 jar 包,注意 spring5.x…

MYSQL数据库下载和安装(详细)

1.点击MySQL官网(后续照着图走) 2.软件下载完点击进入安装 设置要安装的路径然后点击OK,后面点击下一步 再点击下一步 MySQL推荐使用最新的数据库和相关客户端,mysql8换了加密插件,所以如果选第一种方式,很可能导致你的navicat等客户端连不上…

基于C#开发web网页管理系统模板流程-主界面密码维护功能完善

点击返回目录-> 基于C#开发web网页管理系统模板流程-总集篇-CSDN博客 前言 紧接上篇->基于C#开发web网页管理系统模板流程-主界面统计功能完善-CSDN博客 一个合格的管理系统,至少一定存在一个功能——用户能够自己修改密码,理论上来说密码只能有用…

使用Hadoop MapReduce分析邮件日志提取 id、状态 和 目标邮箱

使用Hadoop MapReduce分析邮件日志提取 id、状态 和 目标邮箱 在大数据处理和分析的场景中,Hadoop MapReduce是一种常见且高效的工具。本文将展示如何使用Hadoop MapReduce来分析邮件日志,提取邮件的发送状态(成功、失败或退回)和…

【云原生】使用kubekey部署k8s多节点及kubesphere

kubesphere官方部署文档 https://github.com/kubesphere/kubesphere/blob/master/README_zh.md kubuctl命令文档 https://kubernetes.io/zh-cn/docs/reference/kubectl/ k8s资源类型 https://kubernetes.io/zh-cn/docs/reference/kubectl/#%E8%B5%84%E6%BA%90%E7%B1%BB%E5%9E…

Nginx配置详细解释:(6)实现反向代理服务器,动静分离,负载均衡

作为代理服务器是当客户端访问代理服务器时,代理服务器代理客户端去访问真实web服务器。proxy_pass; 用来设置将客户端请求转发给的后端服务器的主机。 需要模块ngx_http_upstream_module支持。 单台反向代理 在第三台主机上下载安装httpd,在主页面/v…

VMware Ubuntu虚拟机上设置SSH连接,win直接用ssh连接虚拟机

要在Ubuntu虚拟机上设置SSH连接,并进行一些特定配置,您可以按照以下步骤进行操作: 步骤 1:安装OpenSSH Server 打开终端。 更新包列表并安装OpenSSH Server: sudo apt update sudo apt install openssh-server安装完…

讯飞星火高考中英文作文双料第一,力压GPT-4o

随着2024届高考落幕,近日,各家大模型的高考评测结果陆续出炉,多家媒体和专业人士用高考中英文作文题和数学题对大模型能力进行测评,讯飞星火不仅占据榜首,并超过GPT-4o,在本届的“大模型高考”中&#xff0…

Django之云存储(一)

一、介绍 用户上传的文件以及项目中使用的静态文件,除了保存在本地服务器,还在可以保存在云服务中,比如: 阿里云七牛云(课程选用)亚马逊云等1.1、使用方式 注册账号 七牛云开发者平台 实名认证 创建空间

Unity 集成 FMOD 音频管理插件 2.02

Unity 集成 FMOD 音频管理插件 2.02 3. 集成教程:3.1 设置Unity项目3.2 设置FMOD项目3.3 设置 FMOD for Unity3.4 添加声音:卡丁车引擎3.5 添加声音:氛围3.6 添加声音:音乐3.7 删除现有音频3.8 下一步 10. 脚本 API 参考10.1 基础…

2024年6月12日 (周三) 叶子游戏新闻

万能嗅探: 实测 网页打开 某视频号、某音、某红薯、某站,可以做到无水印的视频和封面下载功能哦,具体玩法大家自行发挥吧。 WPS免登录一键修改器: 去除烦人的登录且能正常使用 杨奇试戴《黑神话:悟空》豪华版金箍 效果还不错!最近…

181.二叉树:验证二叉树(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* Tre…

3-哈希表-71-三数之和-LeetCode15

3-哈希表-71-三数之和-LeetCode15 参考:代码随想录 LeetCode: 题目序号15 更多内容欢迎关注我(持续更新中,欢迎Star✨) Github:CodeZeng1998/Java-Developer-Work-Note 技术公众号:CodeZeng1998&#xff…

【人工智能】文本提取技术的算法延伸

✍🏻记录学习过程中的输出,坚持每天学习一点点~ ❤️希望能给大家提供帮助~欢迎点赞👍🏻收藏⭐评论✍🏻指点🙏 文本提取技术中用到的算法 TF-IDF(Term Frequency-Inverse Document Frequency…

数据分类分级,误把起点当终点

数据分类分级 吉祥学安全知识星球🔗除了包含技术干货:Java代码审计、web安全、应急响应等,还包含了安全中常见的售前护网案例、售前方案、ppt等,同时也有面向学生的网络安全面试、护网面试等。 01 — 数据分类分级的定义 数据分…

Tuxera NTFS for Mac 2023软件:超级详细安装步骤(最新版软件下载)

软件简介: 在 Mac 上打开、编辑、复制、移动或删除存储在 Windows NTFS 格式 USB 驱动器上的文件。当您获得一台新 Mac 时,它只能读取 Windows NTFS 格式的 USB 驱动器。要将文件添加、保存或写入您的 Mac,您需要一个附加的 NTFS 驱动程序。…