当前位置: 首页 > news >正文

Linux进程程序替换

文章目录

  • 进程程序替换
  • 程序替换函数
    • execl()函数
      • 调用另外一个可执行程序
    • execlp()函数
    • ecexv()函数
    • execle()函数
  • 替换函数总结

进程程序替换

什么是进程程序替换?为什么要有程序替换?
顾名思义,进程程序替换就是把该进程中的程序替换掉,那么为什么要把该进程中的程序替换掉呢?因为我们在创建子进程时,想让子进程去做其他的事情,如果直接把子进程要做的事情写在该程序中,会让程序变得很臃肿,而且我们希望子进程可以做很多的事情。

程序替换函数

子进程进行程序替换,一般要使用exec系列的函数。
接下来我们对这个系列的函数使用进行阐述并总结
在这里插入图片描述
通过下面代码我们来依次了解这些函数的使用:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

execl()函数

先看使用:
在这里插入图片描述
执行结果:
在这里插入图片描述
对各参数进行说明:
在这里插入图片描述
参数path:要我们说明要调用程序的路径
参数arg:可以看到这里是一个可变参数,第一个参数写命令,后面的写对应的选项,最后要以NULL结尾。通俗来讲就是我们在命令行中怎么写的这里的参数arg就要怎么写,最后再加上NULL即可。比如ls -a -l 这里就写 ls -a -l NULL.

调用另外一个可执行程序

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在可执行程序mytest1中调用可执行程序mytest2

execlp()函数

使用:
在这里插入图片描述
结果
在这里插入图片描述
对参数进行说明:
在这里插入图片描述
参数file:函数execlp中含有p,说明继承的环境变量属性没有被替换,因此无需写路径,指明要执行的程序在哪个文件即可,会自动的在对应的路径下找到这个文件,例如ls在/usr/bin/下的ls文件中,因此当要执行程序ls时,这里的参数就是对应的文件ls
可变参数arg:因为函数名中含有l,意为参数格式为列表,也是按在bash命令下写的这就证明写,最后加上NULL即可。

ecexv()函数

使用1:
注意类型是char* const 而不是const char*
在这里插入图片描述

在这里插入图片描述
结果1:
在这里插入图片描述
使用2:

在这里插入图片描述
在这里插入图片描述

结果2:
在这里插入图片描述

参数:

参数path:因为函数名不带p,没有继承环境变量,因此要传确切的文件路径(相对路径或绝对路径总之能让当前文件找到即可)
参数argv:注意这里的参数类型是char* const而不是const char*,这是个指针指向不可变的指针数组,相比于可变参数列表传递,这个函数是直接将一个参数数组传了过去。也就是把可变参数列表放到了这个数组里。对于自己写的程序要传的path路径是生成的可执行程序的路径,而不是源文件的路径
在这里插入图片描述
在这里插入图片描述

execle()函数

putenv()函数用于添加一个环境变量给调用进程的上下文
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
可以看到当我们不传环境变量时,子进程也可以拿到我们在当前进程创建的环境变量。那么当前进程的父进程可以拿到我们在当前进程的环境变量吗?
在这里插入图片描述
可以看到在当前进程导入的变量与它的父进程无关,它只会传递给子进程

那么我要是就想自己传环境变量应该怎么传呢?
那就要使用exec系列中带e的函数了
使用:
在这里插入图片描述
在这里插入图片描述
结果
在这里插入图片描述
参数
在这里插入图片描述
参数path:表明子进程要替换成的可执行程序的路径
参数arg:可变参数列表,传递命令行参数
参数envp:传递环境变量表,可以用自己写的环境变量的指针数组传递,也可以用全局变量environ传递
传递全局变量environ
使用:
在这里插入图片描述
在这里插入图片描述
结果:
在这里插入图片描述
对这两种方式进行总结:传递environ会把在父进程中继承中的环境变量也都传过去,若传递的是在当前进程写的自定义环境变量指针数组,那么在替换函数中接收到的环境变量会把在父进程中继承中的环境变量覆盖掉

替换函数总结

1、函数名中带l,就是要我们以参数列表的形式传递命令行参数
2、函数名中带v,就是要我们以指针数组的形式把参数传过去
3、函数中带p,说明它会继承父进程的环境变量,因此可只需指明要去替换的可执行程序的文件名即可,函数会自己去找到该文件
4、函数名中带e的,需要我们自己自定义设置环境变量,可以自己添加环境变量指针数组传过去,但这会覆盖继承的环境变量,如果想保留继承的环境变量,那么在当前进程putenv()对应的环境变量添加到当前进程的上下文(不会添加到父进程),再用全局变量environ传递过去即可

对字母所指的单词进行解释:
l:list列表
v:vector数组
p:path路径
e:environment环境

相关文章:

Linux进程程序替换

文章目录 进程程序替换程序替换函数execl()函数调用另外一个可执行程序 execlp()函数ecexv()函数execle()函数 替换函数总结 进程程序替换 什么是进程程序替换?为什么要有程序替换? 顾名思义,进程程序替换就是把该进程中的程序替换掉&#x…...

Istio实战(九)-Envoy 流量劫持

前言 Envoy 是一款面向 Service Mesh 的高性能网络代理服务。它与应用程序并行运行,通过以平台无关的方式提供通用功能来抽象网络。当基础架构中的所有服务流量都通过 Envoy 网格时,通过一致的可观测性,很容易地查看问题区域,调整整体性能。 Envoy也是istio的核心组件之一…...

Node.js 的pm2 库

Node.js 是一个非常流行的 JavaScript 运行时环境,用于编写服务器端代码。随着 Node.js 应用程序的增长, 我们需要一种可靠的方式来管理应用程序的生命周期。这就是 pm2 库的作用。它是一个流行的 Node.js 应用程序进程管理器,可以帮助我们管…...

AutoX.js - openCV多分辨率找图

AutoX.js - openCV多分辨率找图 一、起因 AutoXjs 中有两个找图相关的方法 findImage 和 matchTemplate,之前一直没发现什么问题,但最近在一次测试找图时,明明大图和模板图的轮廓都清晰,却怎么也找不到图,降低阈值参…...

Python爬虫实战案例——第七例

文章中所有内容仅供学习交流使用,不用于其他任何目的!严禁将文中内容用于任何商业与非法用途,由此产生的一切后果与作者无关。若有侵权,请联系删除。 目标:LI视频采集 地址:aHR0cHM6Ly93d3cucGVhcnZpZGVv…...

C# 图解教程 第5版 —— 第13章 数组

文章目录 13.1 数组13.1.1 定义13.1.2 重要细节 13.2 数组的类型13.3 数组是对象13.4 一维数组和矩形数组13.5 实例化一维数组或矩形数组13.6 访问数组元素(*)13.7 初始化数组13.7.1 显示初始化一维数组13.7.2 显示初始化矩形数组13.7.3 初始化矩形数组的…...

android studio启动Task配置

Android studio 高版本默认不开启Task配置,需要自己手动开启 1.低版本配置路径:(复制他人图片) 2.高版本路径:添加下图勾选配置即可 3.gradle task 3.1 初识task gradle中所有的构建工作都是由task完成的,它帮我们处…...

Xcode运行程序提示 Executable Path is a Directory 问题解决

一、首先运行模拟器报错(没有记录),解决办法: TARGET->Build Settings->Architectures -> Exclude Architectures里面填入arm64,后运行模拟器成功 二、其次模拟器开发完成后,xcode运行真机调试&…...

决策树的优缺点

决策树优点 1. 易于理解和解释,因为树木可以画出来被看见 2. 需要很少的数据准备。其他很多算法通常都需要数据规范化,需要创建虚拟变量并删除空值等。但请注意, sklearn中的决策树模块不支持对缺失值的处理。 3. 使用树的成本(比…...

Flask后端开发(二) - 功能实现和项目总结

目录 1. 功能1:修改文件参数值1.1. 获取网页端传参1.2. 读取文件1.2.1. 一般文件读取方式1.2.2. 特殊文件 —— mlx文件1.2.3. 特殊文件 —— .xlx文件1.3. 查找数据修改位置,替换数据2. 功能2:读取结果数据2.1. 实时数据展示如何存储相关数据?2.2. 读取相关数据,整理、打…...

思维训练第五课插入语和主谓一致

系列文章目录 文章目录 系列文章目录前言一、插入语插入语的分类1、常用作插入语的副词 Indeed的确 certainly 当然 surely 无疑地 however 然而 等2、形容词及词组作插入语3、常作插入语的介词短语4、常作插入语的分词短语 Strictly speaking严格地说,generally sp…...

开源利器:it-tools 项目介绍

作为一名开发人员,我们在日常工作和学习中常常需要使用一系列小工具,如JSON格式化、JSON转表格、当前时间戳、XML格式化、SQL格式化、密码生成以及UUID生成等。通常情况下,我们会在网上搜索各种在线工具来满足这些需求。然而,这些…...

基于和声算法的无人机航迹规划-附代码

基于和声算法的无人机航迹规划 文章目录 基于和声算法的无人机航迹规划1.和声搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用和声算法来优化无人机航迹规划。 1.和声搜索算法 …...

[Linux]线程池

[Linux]线程池 文章目录 [Linux]线程池线程池的概念线程池的优点线程池的应用场景线程池的实现 线程池的概念 线程池是一种线程使用模式。线程池是一种特殊的生产消费模型,用户作为生产者,线程池作为消费者和缓冲区。 线程过多会带来调度开销&#xff0c…...

使用es实现轻量级分布式锁

文章目录 [toc] 1.前言2.实现3.总结 1.前言 一般来说,实现分布式锁的方式有哪几种? 一:Redisson实现 二:ZK实现 这两种实现网上的实现是千篇一律,在本文就不做过多的讲解了 其它方式好像没有了,真的是这…...

富文本编辑器特殊字符的解码编码

var HtmlUtil {/*1.用浏览器内部转换器实现html转码*/htmlEncode:function (html){//1.首先动态创建一个容器标签元素,如DIVvar temp document.createElement ("div");//2.然后将要转换的字符串设置为这个元素的innerText(ie支持)或者textContent(火狐&…...

几种软件开发方法对比

几种软件开发方法对比 1 综述 软件开发方法是一种使用早已定义好的技术集及符号表示习惯来组织软件生产的过程。 本文对净室方法、结构化方法、面向对象方法、原型法、逆向工程等方法进行梳理,并对各种开发方法特点、优点进行对比。 2 净室方法 2.1 特点 净…...

在Maven中发布项目到Nexus私有服务器

一、测试环境 Sonatype Nexus 3.61.0-02 Maven 3.9.2 二、环境配置 2.1找到maven的配置文件 2.2添加私有仓库账户密码 <servers><server><id>nexus</id><username>admin</username><password>admin</password></server&…...

TypeScript - 类 -类的继承

浅谈类的继承 类的继承 就是对一个类进行扩展&#xff0c;可以扩展属性、方法。 类的继承 可以很好的解决代码冗余的问题。比如 &#xff1a; 【学生】类 拥有 基本的 姓名、年龄 两个属性&#xff0c; 【体育生】类也属于【学生】类&#xff0c;有 姓名、年龄、训练项目 三个…...

QT: QLineEdit 密码模式、QLineEdit输入模式

setEchoMode(QLineEdit::Normal) 是一个函数&#xff0c;用于设置 QLineEdit 对象的输入模式。具体用法如下&#xff1a; lineEdit->setEchoMode(QLineEdit::Normal);该函数的作用是将 QLineEdit 对象的输入模式设置为“正常模式”&#xff0c;在此模式下&#xff0c;用户的…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...