Liunx进程替换

文章目录

  • 1.进程替换
  • 2.替换过程
  • 3.替换函数exec
    • 3.1命名解释
  • 4.细说6个exe函数
    • execl函数
    • execv
    • execlp、execvp
    • execle、execve

1.进程替换

fork()函数在创建子进程后,子进程如果想要执行一个新的程序,就可以使用进程的程序替换来完成。
程序替换是通过特定的接口,加载磁盘上的一个全新的程序(代码和数据),加载到调用进程的地址空间中。

2.替换过程

创建子进程后,子进程可以通过调用exec函数,来执行另一个程序。当程序调用exec函数时,该进程的用户空间代码和数据完完全全被新程序所替换,从新程序的启动开始执行。调用exec函数并不创建新进程,所以该进程前后的id并未改变。
在这里插入图片描述
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1eda0c5ac56143f2b88ae54a92f1a67d.png在这里插入图片描述

3.替换函数exec

实际上有六种以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函数只有出错才有返回值。

参数

  • filename / pathname:

filename:指定文件名作参数(filename当参数时,包含"/"会在指定路径查找,不然按照PATH环境变量在指定路径目录查看可执行文件)
pathname:指定环境变量路径作参数(路径名+程序)

  • 函数表传参:

函数execl、execlp以及execle要求新程序的每一个命令行参数都说明一个单独的参数,参数表以空指针结尾,一般方法:
> char *arg(), char *argl, ..., char *argn, (char *)0
这种语法说明了最后一个命令行参数之后跟一个空指针,如果用常量0表示,需要将它强制转换成一个空指针,不然它将被解释成整形参数,(比如上面:ls -l -a 被解释成 ls -l -a 0),如果一个整形的长度与char*的长度不同,那么exec函数的实际参数将出错。
其余4个函数,则先构造一个指向各参数的指针数组,然后将该数组指针地址作为这4个函数的参数。

  • 环境变量表传参

以e结尾的三个函数:execle、execve、fexecve:可以传递一个指向环境字符串指针数组的指针。

3.1命名解释

  • l(list):表示参数采用列表
  • v(vector):参数用数组
  • p(path):有p自动搜索环境变量PATH
  • e(env):表示自己维护环境变量
    在这里插入图片描述

4.细说6个exe函数

execl函数

原型:

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

解释:

  • path:表示PATH环境变量路径
  • arg:表示执行什么命令
  • …:可变参数列表,可以传多个参数

例子:
在这里插入图片描述

execv

原型:

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

解释:

  • 与execl不同,execv传递的是一个char* const的数组,而execl传递的是一个个const char*
  • v表示的就是数组

例子:
在这里插入图片描述

execlp、execvp

原型:

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

解释:
结尾有p,表示自动搜索环境变量,不需要写路径,写文件路径就好。

实列:

execlp
在这里插入图片描述

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

execle、execve

以e结尾是要进行自己组装环境变量
原型:

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

解释:

  • env是我们传递的全新的环境变量,对于env我们可以传递父进程的环境变量,也可以在父进程的环境变量上新增。
  • 可以通过getenv()函数获取环境变量
#include <stdlib.h>
char *getenv(const char *name);

实例:
execle
在这里插入图片描述
execvpe
在这里插入图片描述

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

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

相关文章

【华为云Astro-服务编排】服务编排中图元的使用与配置

目录 子服务编排图元 子服务编排图元的作用 如何使用子服务编排图元 脚本图元 脚本图元的作用 如何使用脚本图元 记录创建图元 记录创建图元的作用 如何使用记录创建图元 记录删除图元 记录删除图元的作用 如何使用记录删除图元 记录查询图元 记录查询图元的作用…

SQL Server相关的sql语句

目录 一、数据定义语言&#xff08;DDL&#xff09;1. 创建数据库2. 修改数据库3. 删除数据库4. 创建表5. 修改表结构6. 删除表 二、数据操作语言&#xff08;DML&#xff09;1. 插入数据2. 更新数据3. 删除数据 三、数据查询语言&#xff08;DQL&#xff09;1. 基础查询2. 去重…

【Hot 100】55. 跳跃游戏

目录 引言跳跃游戏我的解题 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;算法专栏&#x1f4a5; 标题&#xff1a;【Hot 100】55. 跳跃游戏❣️ 寄语&#xff1a;书到用时方恨少&#xff0c;事非经过不知难&#xff01; 引言 跳跃游戏 &#x…

基于51单片机的车内防窒息检测报警系统

目录 具体实现功能 设计介绍 资料内容 全部内容 资料获取 具体实现功能 具体实现功能&#xff1a; &#xff08;1&#xff09;检测车内温度及二氧化碳浓度并用lcd1602实时显示。 &#xff08;2&#xff09;当人体红外传感器检测到车内有人&#xff0c;且温度或二氧化碳浓度…

关于智能体API参考接口

关于智能体在Flask的源码&#xff1a;请求体(在payload里的是请求体)、请求头&#xff08;在headers里的i局势请求头&#xff09;。 我的例子&#xff1a; 我的疑问&#xff1a;为什么没按Coze官方API文档格式&#xff0c;在Apifox里发POST请求却能收到回复&#xff1f; 1. 你…

Excel 批量下载PDF、批量下载考勤图片——仙盟创梦IDE

在办公场景中&#xff0c;借助应用软件实现 Excel 批量处理考勤图片、电子文档与 PDF&#xff0c;具有诸多显著优势。 从考勤图片处理来看&#xff0c;通过 Excel 批量操作&#xff0c;能快速提取图片中的考勤信息&#xff0c;如员工打卡时间、面部识别数据等&#xff0c;节省…

Apache Doris + MCP:Agent 时代的实时数据分析底座

一、Apache Doris&#xff1a;面向 Agent 时代的智能数据平台 当我们谈论 2025 年时&#xff0c;业界普遍认为这将是"Agent 革命年"&#xff08;Agentic Revolution&#xff09;的开端。与传统的人机交互模式不同&#xff0c;AI Agent 作为一个全新的"用户角色…

能不能用string接收数据库的datetime类型字段

在Java中使用String类型通过MyBatis接收MySQL的datetime类型字段时&#xff0c;​可以正常工作&#xff0c;但需注意格式和潜在问题。以下是关键点&#xff1a; 1. ​直接转换是可行的​ MySQL的datetime字段&#xff08;如 2023-10-05 12:34:56&#xff09;会被MyBatis自动转…

【Python训练营打卡】day44 @浙大疏锦行

DAY 44 预训练模型 知识点回顾&#xff1a; 1. 预训练的概念 2. 常见的分类预训练模型 3. 图像预训练模型的发展史 4. 预训练的策略 5. 预训练代码实战&#xff1a;resnet18 作业&#xff1a; 1. 尝试在cifar10对比如下其他的预训练模型&#xff0c;观察差异&#xff0c;…

MySQL中关于事务和锁的常见执行命令整理包括版本区别

MySQL中关于事务和锁的常见执行命令实例整理&#xff0c;并标注了不同版本下的区别&#xff08;如MySQL 8.0与旧版本的差异&#xff09;&#xff1a; 一、事务相关命令 1. 事务控制 命令描述版本差异START TRANSACTION; 或 BEGIN;显式开启事务通用语法&#xff0c;无版本差异…

PyTorch-Transforms的使用(二)

对图像进行处理 安装open cv ctrlP 看用法 ToTensor的使用 常见的Transforms 归一化的图片 两个长度为三的数组&#xff0c;分别表示三个通道的平均值和标准差 Resize&#xff08;&#xff09; Compose&#xff08;&#xff09; 合并执行功能&#xff0c;输入进去一个列表&a…

vscode实用配置

前端开发安装插件&#xff1a; 1.可以更好看的显示文件图标 2.用户快速打开文件 使用步骤&#xff1a;在html文件下右键点击 open with live server 即可 刷力扣&#xff1a; 安装这个插件 还需要安装node.js即可

Day130 | 灵神 | 回溯算法 | 子集型 电话号码的字母组合

Day130 | 灵神 | 回溯算法 | 子集型 电话号码的字母组合 17.电话号码的字母组合 17. 电话号码的字母组合 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者用index代替i&#xff0c;这里的index其实就是digits数组的下标 按照灵神的回溯三问&#xff0c;那就…

深入理解JavaScript设计模式之闭包与高阶函数

前言小序 一场失败面试 2023年的某一天&#xff0c;一场让我印象深刻的面试&#xff1a; 面试官&#xff1a; “你了解闭包吗&#xff1f;请说一下你对闭包的理解。” 我自信满满地答道&#xff1a; “闭包就是函数里面套函数&#xff0c;里面的函数可以访问外部函数的变量。…

使用 Spring Boot 3.3 和 JdbcTemplate 操作 MySQL 数据库

在现代的 Java 应用开发中&#xff0c;Spring Boot 提供了强大的工具来简化数据库操作。JdbcTemplate 是 Spring 提供的一个核心类&#xff0c;用于简化 JDBC 操作&#xff0c;减少样板代码。本文将介绍如何在 Spring Boot 3.3 项目中使用 JdbcTemplate 来操作 MySQL 数据库&am…

如何做好一份技术文档?(下篇)

如何做好一份技术文档&#xff1f;&#xff08;下篇&#xff09; 下篇&#xff1a;文档体验的极致优化 ——从可用性到愉悦性的跨越 文档用户体验地图 新手路径 专家路径 [安装] → [配置] → [示例] [API] → [参数] → [源码] │ ▲ …

Windows 12确认没了,Win11 重心偏移修Bug

微软悄然搁置了传说中的Windows 12开发计划&#xff0c;转身将精力投入到Windows 11的持续进化中。今年秋季的主角已经确定——Windows 11 25H2&#xff0c;它将于9月或10月间与我们正式见面。 与去年24H2的大规模更新不同&#xff0c;25H2更像是场精心策划的“功能解锁”。微软…

JavaScript中的正则表达式:文本处理的瑞士军刀

JavaScript中的正则表达式&#xff1a;文本处理的瑞士军刀 在编程世界中&#xff0c;正则表达式&#xff08;Regular Expression&#xff0c;简称RegExp&#xff09;被誉为“文本处理的瑞士军刀”。它能够高效地完成字符串匹配、替换、提取和验证等任务。无论是前端开发中的表…

基于LEAP模型在能源环境发展、碳排放建模预测及分析中实践应用

在国家“3060”碳达峰碳中和的政策背景下&#xff0c;如何寻求经济-能源-环境的平衡有效发展是国家、省份、城市及园区等不同级别经济体的重要课题。根据国家政策、当地能源结构、能源技术发展水平以及相关碳排放指标制定合理有效的低碳能源发展规划需要以科学准确的能源环境发…

Python爬虫实战:研究RoboBrowser库相关技术

1. 引言 1.1 研究背景与意义 随着电子商务的快速发展,商品信息呈现爆炸式增长。据 Statista 数据显示,2025 年全球电子商务销售额预计将达到 7.4 万亿美元,海量的商品数据蕴含着巨大的商业价值。对于电商企业而言,及时获取竞争对手的产品信息、价格动态和用户评价,能够帮…