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

【Linux】进程替换、命令行参数及环境变量(超详解)

目录

进程替换

替换函数的含义

命令行参数

环境变量

PATH


进程替换

我们先看代码:

  1 #include<stdio.h>2 #include<unistd.h>3 int main()4 {5     printf("process...begin!\n");6 7     execl("/usr/bin/ls","ls","-a","-l",NULL);8 9     printf("process...end!\n");10     return 0;11 }

运行结果:

 

通过运行结果,我们会发现:

 printf("process...end!\n");并没有被执行;

这是为什么?

我们先来看一下exec函数:

还有一个:int execve(const char *path, char *const argv[], char *const envp[]);

exec函数其实就是替换函数,图像表示:

        以上述代码为例:execl("/usr/bin/ls","ls","-a","-l",NULL);就是将磁盘中的有一段程序的代码和数据替换掉父进程在内存中的代码和数据;exec*执行完毕后,后续的代码不见了,是因为被exec*替换了,所以不会执行exec*后面的代码,简单来说:被替换后后面代码已经找不到了,自然不会被执行;

        这个替换,本质就是这个程序被加载到内存了(exec*函数类似于一种Linux上的加载函数);

那我们非要让后面的代码可以执行,要怎么做呢?

        很简单,父进程中exec*函数后的代码无法执行是因为exec*函数的替换,把后续代码给替代了,找不到后续代码;那我们让后续代码可以找到不就可以了?怎么让它可以找到-------->fork创建子进程,在子进程中执行exec*函数,这就是用的我们之前提到的写实拷贝(让子进程自己去替换,父进程的代码和数据不受影响);

  1 #include<stdio.h>2 #include<unistd.h>3 #include<stdlib.h>4 int main()5 {6     printf("process...begin!\n");7 8     pid_t id =fork();9     if(id==0)10     {11         execl("/usr/bin/ls","ls","-a","-l",NULL);12         exit(1);13     }14     //父进程15     sleep(5);16     printf("process...end!\n");17     return 0;18 }

这样父进程后续代码就可以被执行了;

原理是什么呢?

一开始,子进程完全的父进程的拷贝(页表指向是红色箭头),后面由于exec*函数替换,因为替换的不仅仅是数据,连代码也替换了,这时OS就是进行写时拷贝,把代码和数据都复制了一份(绿色和蓝色箭头的指向);父进程代码和数据仍然存在;

替换函数的含义

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

这个l指的是list 列表,path就是要执行程序的路径,arg:在命令行中怎么执行,这个就怎么写:

例如:ls -a ---->"ls","-a",即可;最后一个参数必须为NULL;

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

这个v指的是vector,path是路径,argv:就是把命令放到argv里面;

例如:

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

用户可以不传要执行文件的路径,但是要传文件名,直接告诉exec*函数,我要执行谁;

这里的p:查找这个程序,系统会在环境变量PATH进行查找;

例如:

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

这里的e:environment:环境变量; envp[]:整体替换所有的环境变量;

例如:

当然,除了可以替换系统命令,也可以替换我们自己写的程序:

先写一个程序:test.c,然后执行:

使用: 

即可:

运行结果:

命令行参数

我们发现在main函数中可带参数,也可以不带参数;

带参数:

这个参数有什么用呢?

我们看下面的代码,将argv打印出来:

运行结果:

根据运行结果我们可以理解:命令行参数本质是交给我们程序的不同选型,用来定制不同的程序功能,命令中会携带很多选项;

例如:ls -a;

           ls -l;等

环境变量

        在Linux中,存在一些全局的设置,表明,告诉命令行解释器应该取哪些路径下去寻找可执行程序;

PATH

PATH:环境变量;

$PATH:打印环境变量内存;

系统中很多的配置,在登录Linux系统的时候,已经加载到bash进程中(内存);

我们发现ls命令:并不需要./,但是我们自己写的程序,比如myprocess,运行时却要./myprocess才可以运行,这是为什么?

我们只需要将我们的程序配置到环境变量中即可;

那怎么配置呢?

/PATH=$PATH:路径;

例如:

        PATH=$PATH:home/sxh/111/lesson06;

因为我们配置的这个PATH是在内存中,重启后,PATH就会复原;

当然,除了PATH,还有其他的环境变量,比如:HOME/SHELL/HISISIZE/PWD等;

env:查看所有环境变量

echo $xxx:查看某一个环境变量

export name=value:设置环境变量

unset name:取消环境变量

怎么打印环境变量?

运行结果:

注意:环境变量默认是可以被子进程拿到的;

相关文章:

【Linux】进程替换、命令行参数及环境变量(超详解)

目录 进程替换 替换函数的含义 命令行参数 环境变量 PATH 进程替换 我们先看代码&#xff1a; 1 #include<stdio.h>2 #include<unistd.h>3 int main()4 {5 printf("process...begin!\n");6 7 execl("/usr/bin/ls","ls"…...

MySQL事务日志—redo日志介绍

MySQL事务日志—redo日志 事务有4种特性&#xff1a; 原子性、一致性、隔离性和持久性。 那么事务的四种特性到底是基于什么机制实现? 事务的原子性、一致性由事务的 undo 日志事务的隔离性由锁机制和MVCC实现。事务的持久性由redo 日志来保证。 两类日志概述&#xff1a;…...

告别音乐小白!字节跳动AI音乐创作工具,让你一键变作曲家!

还在羡慕别人能创作动听的音乐&#xff1f;五音不全的你&#xff0c;也梦想着谱写属于自己的乐章&#xff1f;现在&#xff0c;机会来了&#xff01;字节跳动推出了一款AI音乐创作工具——抖音推出的海绵音乐&#xff0c;它能让你轻松一键创作音乐&#xff0c;即使是“音乐小白…...

空心正方形图案

KiKi学习了循环&#xff0c;BoBo老师给他出了一系列打印图案的练习&#xff0c;该任务是打印用“*”组成的“空心”正方形图案。 输入描述&#xff1a; 多组输入&#xff0c;一个整数(3~20)&#xff0c;表示输出的行数&#xff0c;也表示组成正方形边的“ * ”的数量。 输出描述…...

【EXCEL数据处理】000020 案例 保姆级教程,附多个操作案例。EXCEL使用表格。

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【EXCEL数据处理】000020 案例 保姆级教程&#xff0c;附多个操作案例。…...

虾皮Shopee大数据面试题及参考答案

Cube 表性能优化,还有其他优化的方法吗? Cube 表性能优化可以从多个方面入手。 一方面,可以优化数据存储格式。选择合适的存储格式能够减少存储空间占用,提高数据读取速度。例如,Parquet 格式是一种高效的列式存储格式,它可以按列进行数据压缩,大大减少磁盘 I/O 和内存占…...

重学SpringBoot3-集成Redis(六)之消息队列

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-集成Redis&#xff08;六&#xff09;之消息队列 1. 什么是发布/订阅&#xff08;Pub/Sub&#xff09;&#xff1f;2. 场景应用3. Spring Boot 3 整合 R…...

LeetCode 134 Gas Station 解题思路和python代码

题目&#xff1a; There are n gas stations along a circular route, where the amount of gas at the ith station is gas[i]. You have a car with an unlimited gas tank and it costs cost[i] of gas to travel from the ith station to its next (i 1)th station. You …...

服务攻防

171、一次完整的 HTTP 请求过程 域名解析 --> 发起 TCP 的 3 次握手 --> 建立 TCP 连接后发起 http 请求 --> 服务器 响应 http 请求&#xff0c;浏览器得到 html 代码 --> 浏览器解析 html 代码&#xff0c;并请求 html 代码中的资源&#xff08;如 js、 css…...

leetcode 力扣算法题 快慢指针 双指针 19.删除链表的倒数第n个结点

删除链表的倒数第N个结点 题目要求题目示例解题思路从题目中的已知出发思考寻找目标结点条件转换核心思路 需要注意的点改进建议 完整代码提交结果 题目要求 给你一个链表&#xff0c;删除链表的倒数第n个结点&#xff0c;并且返回链表的头结点。 题目示例 示例 1&#xff1…...

网络五层模型:物理层、数据链路层、网络层、传输层、应用层,分别解决了什么问题?

网络五层模型&#xff08;也称为TCP/IP模型的简化版本&#xff09;将网络通信过程分为五个层次&#xff0c;每一层都解决了特定的问题。以下是每一层的详细解释及其解决的问题&#xff1a; 1. 物理层&#xff08;Physical Layer&#xff09; 解决的问题&#xff1a;数据的物理…...

OpenCV视频I/O(18)视频写入类VideoWriter之初始化 VideoWriter 对象的函数open()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 初始化或重新初始化视频编写器。 该方法打开视频编写器。参数与构造函数 VideoWriter::VideoWriter 中的相同。 cv::VideoWriter::open() 函数用…...

大数据处理从零开始————4.认识HDFS分布式文件系统

1.分布式文件系统HDFS 1.1 认识HDFS 当单台服务器的存储容量和计算性能已经无法处理大文件时&#xff0c;分布式文件系统应运而生。什么是分布式系统&#xff0c;分布式系统是由多个独立的计算机或节点组成的系统&#xff0c;这些计算机通过网络连接&#xff…...

jwt认证课件讲解

JWT 基本概念 在用户登录后&#xff0c;我们需要在不同请求之间记录用户的登录状态&#xff0c;常用方式一般有三种&#xff1a;Cookie&#xff0c;Session和Token。 这里我们使用第三种Token令牌方式来实现认证鉴权&#xff0c;采用Json Web Token认证机制&#xff08;简称…...

【判断推理】逻辑基础

1.1 命题 用语言、符号或者式子表达的&#xff0c;可以判断真假的陈述句称为命题&#xff0c;一般写为 若p&#xff0c;则q 真命题&#xff1a;判断为真的语句假命题&#xff1a;判断为假的语句 eg1&#xff1a;小张是中国人&#xff08;若是小张&#xff0c;则是中国人&#…...

AcWing 655:天数转换 ← 整除、求余

【题目来源】https://www.acwing.com/problem/content/657/【题目描述】 读取对应于一个人的年龄&#xff08;以天为单位&#xff09;的整数值&#xff0c;并转化为年&#xff0c;月和日表示方式输出&#xff0c;年、月、日分别对应 ano(s), mes(es), dia(s)。 注意&#xff1a…...

【解决办法】git clone报错unable to access ‘xxx‘: SSL certificate problem:

使用git clone 时报错unable to access xxx: SSL certificate problem: 这个报错通常是由于SSL证书问题引起的。通常可以按照以下步骤进行排查&#xff1a; 检查网络连接&#xff1a;确保你的网络连接正常&#xff0c;可以访问互联网。尝试使用其他网站或工具测试网络连接是否正…...

算法笔记(十三)——BFS 解决最短路问题

文章目录 迷宫中离入口最近的出口最小基因变化单词接龙为高尔夫比赛砍树 BFS 解决最短路问题 BFS(广度优先搜索) 是解决最短路径问题的一种常见算法。在这种情况下&#xff0c;我们通常使用BFS来查找从一个起始点到目标点的最短路径。 迷宫中离入口最近的出口 题目&#xff1a;…...

Android 简单实现联系人列表+字母索引联动效果

效果如上图。 Main Ideas 左右两个列表左列表展示人员数据&#xff0c;含有姓氏首字母的 header item右列表是一个全由姓氏首字母组成的索引列表&#xff0c;点击某个item&#xff0c;展示一个气泡组件(它会自动延时关闭)&#xff0c; 左列表滚动并显示与点击的索引列表item …...

自动驾驶-问题笔记-待解决

参考线的平滑方法 参考线平滑算法主要有三种&#xff1a; 离散点平滑&#xff1b;螺旋曲线平滑&#xff1b;多项式平滑&#xff1b; 参考链接&#xff1a;参考线平滑 对于平滑方法&#xff0c;一直不太理解平滑、拟合以及滤波三者的作用与区别&#xff1b; 规划的起点&#x…...

AI对话记忆管理实战:memory-organizer库解决长上下文难题

1. 项目概述&#xff1a;一个为AI记忆体“瘦身”与“归档”的利器最近在折腾一些本地大语言模型&#xff08;LLM&#xff09;的应用&#xff0c;比如搭建个人知识库助手或者长期对话机器人&#xff0c;一个绕不开的痛点就是“记忆”的管理。模型本身没有持久记忆&#xff0c;每…...

如何快速掌握G-Helper:华硕笔记本轻量级控制工具完全指南

如何快速掌握G-Helper&#xff1a;华硕笔记本轻量级控制工具完全指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook,…...

Verilog时钟分频实战:从偶数、奇数到小数分频的设计与实现

1. 项目概述&#xff1a;从零开始掌握Verilog时钟分频 在数字电路和FPGA设计中&#xff0c;时钟信号是驱动整个系统同步运行的“心跳”。然而&#xff0c;一个系统往往需要多种不同频率的时钟来驱动不同的模块&#xff0c;比如高速的处理器核心和低速的外设接口。直接使用多个外…...

新手必看!CTFShow文件上传靶场通关保姆级教程(Web151-170全解析)

CTFShow文件上传靶场全解析&#xff1a;从入门到精通的实战指南 初识文件上传漏洞 文件上传功能几乎是每个Web应用都具备的基础模块&#xff0c;但恰恰是这个看似简单的功能&#xff0c;成为了无数安全漏洞的温床。在CTF竞赛中&#xff0c;文件上传类题目因其直观性和实战性&am…...

信号与线性系统分析(吴大正第5版)自学避坑指南:这些印刷错误和公式笔误你遇到了吗?

信号与线性系统分析&#xff08;吴大正第5版&#xff09;自学避坑指南&#xff1a;这些印刷错误和公式笔误你遇到了吗&#xff1f; 当你独自面对《信号与线性系统分析》这本经典教材时&#xff0c;是否曾因某个公式推导卡壳数小时&#xff1f;是否反复检查自己的计算步骤&#…...

量子计算解决最大独立集问题的qReduMIS算法解析

1. 量子计算与最大独立集问题概述最大独立集问题&#xff08;Maximum Independent Set, MIS&#xff09;是图论中的一个经典NP难问题&#xff0c;其目标是找到给定无向图中最大的顶点子集&#xff0c;使得该子集中任意两个顶点之间没有边相连。这个问题在社交网络分析、无线网络…...

用FM收音机也能玩双声道?手把手教你复刻电赛G题双路语音同传系统(48.5MHz频点)

用FM收音机玩转双声道&#xff1a;48.5MHz双路语音同传系统实战指南 在电子设计竞赛中&#xff0c;双路语音同传系统一直是考验学生综合能力的经典题型。但你知道吗&#xff1f;这套看似专业的无线收发系统&#xff0c;其实可以用身边最常见的FM收音机来验证和体验。本文将带你…...

Linux系统操作痕迹清理:Shell脚本实现与安全运维实践

1. 项目概述与核心价值在Linux系统上进行日常运维、故障排查或者一些自动化任务时&#xff0c;我们执行的每一条命令、访问的每一个文件&#xff0c;甚至系统本身的运行状态&#xff0c;都会留下或多或少的“痕迹”。这些痕迹&#xff0c;对于系统审计和安全分析来说是宝贵的日…...

常见 PE 启动盘

文章目录常见 PE 启动盘一、强烈推荐 纯净无捆绑类二、功能强大 可选推广类三、老牌经典 捆绑较多类四、官方原版常见 PE 启动盘 这里整理了一份常见的PE启动盘大全&#xff0c;按纯净度和口碑分类&#xff0c;并附上官网或可靠的下载渠道。 一、强烈推荐 纯净无捆绑类 这…...

SAP ECC6 2027年停服倒计时:手把手教你评估四大迁移路径与成本(含第三方支持避坑指南)

SAP ECC6 2027年停服倒计时&#xff1a;企业迁移决策全景指南 当2027年的钟声敲响时&#xff0c;全球仍在运行SAP ECC6系统的企业将面临一个关键转折点。这不是简单的技术升级&#xff0c;而是一次关乎企业数字化未来的战略抉择。作为经历过三次SAP重大版本迁移的顾问&#xff…...