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

Bash 执行命令的基本流程

是的,Bash 在执行外部命令(如 lsgrep 等非内置命令)时,确实会调用 exec 系列函数来实现进程程序替换。以下是其底层机制的分步解析:


1. Bash 执行命令的基本流程

当在 Bash 中键入一个命令(例如 ls -l)时,Bash 会按以下步骤处理:

  1. 解析命令:识别命令类型(内置命令、外部程序、别名等)。
  2. 处理输入/输出重定向:调整文件描述符(如 ><|)。
  3. 判断是否为内置命令
    • 若为内置命令(如 cdecho),直接由 Bash 自身处理,无需调用 exec
    • 若为外部程序(如 /bin/ls),进入 fork + exec 流程。

2. 外部命令的执行细节

对于外部命令,Bash 通过以下步骤启动新程序:

  1. fork() 创建子进程

    • 调用 fork() 复制当前进程(Bash 自身)的副本。
    • 子进程与父进程(Bash)拥有相同的代码、数据、文件描述符等。
  2. 子进程中调用 exec 函数

    • 子进程通过 execve() 系统调用(exec 函数族的底层实现)加载目标程序(如 /bin/ls)。
    • 进程映像被替换:子进程的代码段、数据段等被新程序的二进制内容覆盖,但 PID 保持不变。
    • exec 成功,子进程开始执行新程序;若失败,子进程终止并返回错误。
  3. 父进程等待子进程结束

    • 父进程(Bash)调用 waitpid() 等待子进程结束,回收其资源。

3. 关键证据与实验验证

(1) 通过 strace 跟踪系统调用

运行以下命令观察 Bash 执行 ls 的过程:

strace -f -e execve bash -c "ls"

输出片段:

execve("/bin/ls", ["ls"], 0x7ffd7d4f9d80 /* 50 vars */) = 0

此处明确显示 Bash 子进程调用了 execve() 加载 /bin/ls

(2) 直接替换进程的 exec 命令

Bash 自身支持 exec 命令,例如:

exec ls

此时,Bash 进程自身被 ls 替换,执行完 ls 后直接退出(不返回 Shell),这进一步验证了 exec 的作用。


4. exec 的变体与参数传递

Bash 在调用 exec 时,会根据命令特性选择合适的 exec 函数变体:

  • execvp:自动搜索 PATH 环境变量中的可执行文件(如 ls 无需写全路径)。
  • execve:显式指定可执行文件路径和环境变量(如 /bin/ls)。

5. 例外情况

以下场景中,Bash 不会调用 exec

  1. 内置命令:如 cdexitexport 等,由 Bash 直接处理。
  2. Shell 函数或脚本:通过解释器(如 bashsh)执行,但仍可能间接调用 exec
  3. 进程替换(Process Substitution):
    diff <(sort file1) <(sort file2)
    
    此时通过匿名管道和临时文件描述符实现,但最终仍依赖 exec 执行 sort

6. 总结

  • :Bash 在执行外部命令时,通过 fork() + exec() 实现进程程序替换。
  • :内置命令或 Shell 自身功能(如变量赋值)无需调用 exec

这一机制保证了外部命令的独立运行环境,同时保持了 Bash 进程的稳定性(父进程不受子程序崩溃影响)。

相关文章:

Bash 执行命令的基本流程

是的&#xff0c;Bash 在执行外部命令&#xff08;如 ls、grep 等非内置命令&#xff09;时&#xff0c;确实会调用 exec 系列函数来实现进程程序替换。以下是其底层机制的分步解析&#xff1a; 1. Bash 执行命令的基本流程 当在 Bash 中键入一个命令&#xff08;例如 ls -l&a…...

我们来学mysql -- 安装8.4版本

8.4版本 下载解压用户目录&用户权限my.cnf初始化普通启动safe启动检查启动用户登录远程登录用户root% 下载 地址选择安装包 查看OS位数 getconf LONG_BIT 二进制安装包说明 二进制包的文件名会包含 linux 或 glibc 等字样如&#xff1a;mysql-8.4.4-linux-glibc2.28-x86_…...

Java MVC架构在当今时代的技术解析

一、前言 MVC&#xff08;Model-View-Controller&#xff09;架构作为经典的设计模式&#xff0c;经历了数十年的演进。尽管新兴技术层出不穷&#xff0c;Java MVC仍然在企业级开发中占据重要地位。 二、Java MVC核心优势 1. 模块化分层设计 职责分离&#xff1a;数据层&…...

FPGA----基于ZYNQ 7020实现定制化的EPICS程序开发

引言:基于前文,我们在FPGA侧实现了一些外设驱动功能,并将其导出为hdf生成了他的petalinux,借助ALINX的Debian8做了我们自己的根文件系统。现在,我们需要在petalinux下开发一个epics程序,可以调用我们FPGA的驱动。 1、整体程序架构 注意:我们基于ALINX的根文件系统是不完…...

配置hosts

打开文件 右键点击「记事本」或其他文本编辑器&#xff0c;选择「以管理员身份运行」。 打开路径&#xff1a;C:\Windows\System32\drivers\etc\hosts 添加映射 在文件末尾添加一行&#xff0c;格式为&#xff1a; plaintext IP地址 域名例如&#xff1a; plaintext 127.0.…...

Blender 入门教程(一):模型创建

一、前言 大家都知道&#xff0c;现在 AIGC 领域日新月异&#xff0c;今天 AI 大模型能生成粗糙的 3D 模型&#xff0c;明天就能做成商业级的 3D 模型&#xff0c;但是如果想要一些细节上也有的&#xff0c;还是需要自己手动对模型的布线进行调整&#xff0c;然后再蒙皮等等。…...

JVM对象头中的锁信息机制详解

JVM对象头中的锁信息机制详解 Java中的对象锁机制是高性能并发的基石&#xff0c;而这一切的底层实现都离不开对象头中的 Mark Word 字段。本文将系统梳理JVM对象头中锁信息的存储与演化机制&#xff0c;解析锁升级与批量重偏向优化原理&#xff0c;并通过JOL工具实战验证对象…...

需要低调使用的网盘小工具

周末总是过得飞快&#xff0c;转眼间周一又要来临。今天就不多说&#xff0c;直接给大家分享一款实用的小软件&#xff01; 软件介绍 今天给大家带来一款网盘转存工具——BaiduPanFilesTransfers。 这款工具是某知名网盘的批量转存利器。软件作者已经编写了一份非常详细的说明…...

js fetch流式请求 AI动态生成文本,实现逐字生成渲染效果

开启流式请求&#xff1a;向后端接口发起普通的 fetch&#xff0c;它会返回一个包含 ReadableStream 的 Response 对象获取流式读取器&#xff1a;调用 response.body.getReader() 获取一个 ReadableStreamDefaultReader 实例循环读取数据块&#xff1a;在 while(true) 循环或 …...

软考教材重点内容 信息安全工程师 第24章 工控安全需求分析与安全保护工程

24.1.1 工业控制系统概念及组成 工业控制系统是由各种控制组件、监测组件、数据处理与展示组件共同构成的对工业生产过程进行控制和监控的业务流程管控系统。工业控制系统通常简称工控系统(ICS)。工控系统通常分为离散制造类和过程控制类两大类&#xff0c;控制系统包括 SCADA…...

BGP基础实验

一、配置思路 AS200 内部路由由 OSPF 负责&#xff0c;使 AR2 ~ AR5 内部环回地址可达。 各 AS 之间通过 BGP 实现跨域路由互通。 通过 import-route ospf 语句将 OSPF 路由导入 BGP&#xff0c;再由 BGP 向外通告。 使用 network 命令通告本地环回地址。 AR1 <Huawei…...

遭遇DDoS攻击为什么不能反击回去?

遭遇DDoS&#xff08;分布式拒绝服务&#xff09;攻击时&#xff0c;不能直接“反击回去”的原因涉及技术、法律、道德和实际操作的多个层面。以下是详细分析&#xff1a; 1. 技术难题&#xff1a;难以定位真正的攻击者 分布式攻击源&#xff1a;DDoS攻击的特点是流量来自全球各…...

专题二:二叉树的深度搜索(二叉树剪枝)

以leetcode814题为例 题目分析&#xff1a; 也就是当你的子树全为0的时候就可以剪掉 算法原理分析&#xff1a; 首先分析问题&#xff0c;你子树全为0的时候才可以干掉&#xff0c;我们可以设递归到某一层的时候如何处理 然后抽象出三个核心问题 也就是假设我们递归到第2层…...

服务器共享文件夹如何实现外网访问

一、远程访问共享文件需求 有些企业在内网服务器上存储了很多重要工作文件&#xff0c;这些文件共享后需要在外网被员工访问 快解析帮助用户远程访问企业内网服务器共享文件夹 二、快解析实现远程共享文件夹的方法 下面简单介绍一下通过内网穿透快解析实现自己服务器上的共享…...

git|gitee仓库同步到github

参考&#xff1a;一次提交更新两个仓库&#xff0c;Get 更优雅的 GitHub/Gitee 仓库镜像同步 文章目录 进入需要使用镜像功能的仓库&#xff0c;进入「管理」找到「仓库镜像管理」选项&#xff0c;点击「添加镜像」按钮绑定github绑定成功后再次点击添加镜像如何申请 GitHub 私…...

1.Redis-key的基本命令

&#xff08;一&#xff09;Redis的基本类型 String&#xff0c;List&#xff0c;Set&#xff0c;Hash&#xff0c;Zset 三种特殊类型&#xff1a;geospatial&#xff08;地理空间数据&#xff09;、hyperloglog[基数估算&#xff08;去重计数&#xff09;]、bitmaps(位图&…...

配置Hadoop集群环境-使用脚本命令实现集群文件同步

在 Hadoop 集群环境中&#xff0c;确保各节点配置文件一致至关重要。以下是使用 rsync 结合 SSH 实现集群文件同步的脚本方案&#xff0c;支持批量同步文件到所有节点&#xff1a; 1. 前提条件 所有节点已配置 SSH 免密登录主节点&#xff08;NameNode&#xff09;能通过主机…...

搭建高可用及负载均衡的Redis

搭建高可用及负载均衡的Redis系统是确保数据存储和访问高效且可靠的关键。本文将详细介绍如何配置高可用的Redis集群&#xff0c;并通过负载均衡实现性能优化。 高可用Redis架构设计 高可用性是指系统在部分组件失效时仍能继续运行。对于Redis&#xff0c;高可用架构通常包括…...

Hepatology | 南京鼓楼医院余德才团队:从「无药可用」到「精准打击」!肝癌脂肪代谢分型让3类患者各有生路!

文章标题&#xff1a;Multiomics identifies metabolic subtypes based on fatty acid degradation allocating personalized treatment in hepatocellular carcinoma 发表期刊&#xff1a;Hepatology 影响因子&#xff1a;12.9 客户单位&#xff1a;南京市鼓楼医院 百趣提…...

【日撸 Java 三百行】Day 11(顺序表(一))

目录 Day 11&#xff1a;顺序表&#xff08;一&#xff09; 一、关于顺序表 二、关于面向对象 三、代码模块分析 1. 顺序表的属性 2. 顺序表的方法 四、代码及测试 拓展&#xff1a; 小结 Day 11&#xff1a;顺序表&#xff08;一&#xff09; Task&#xff1a; 在《数…...

配置集群-日志聚集操作

日志聚集是指将分布式集群中各个节点上的应用程序日志收集并汇总到一个集中的位置&#xff0c;方便后续的查看、分析和管理。在 Hadoop 和 Spark 集群中&#xff0c;日志聚集是一项重要的功能&#xff0c;下面分别介绍如何在这两个集群中配置日志聚集操作。 Hadoop 集群日志聚…...

node版本.node版本、npm版本和pnpm版本对应

报错&#xff1a; ERR_PNPM_META_FETCH_FAIL GET https://registry.npmmirror.com/rollup: Value of "this" must be of type URLSearchParams node版本 Node.js — Node.js Releases node和pnpm对应关系 Installation | pnpm 参考 NVM管理node版本.node版本、…...

电商物流管理优化:从网络重构到成本管控的全链路解析

大家好&#xff0c;我是沛哥儿。作为电商行业&#xff0c;我始终认为物流是电商体验的“最后一公里”&#xff0c;更是成本控制的核心战场。随着行业竞争加剧&#xff0c;如何通过物流网络优化实现降本增效&#xff0c;已成为电商企业的必修课。本文将从物流网络的各个环节切入…...

Java学习手册:客户端负载均衡

一、客户端负载均衡的概念 客户端负载均衡是指在客户端应用程序中&#xff0c;根据一定的算法和策略&#xff0c;将请求分发到多个服务实例上。与服务端负载均衡不同&#xff0c;客户端负载均衡不需要通过专门的负载均衡设备或服务&#xff0c;而是直接在客户端进行请求的分发…...

E+H流量计与Profibus DP主站转Modbus RTU/TCP网关通讯

EH流量计与Profibus DP主站转Modbus RTU/TCP网关通讯 随着工业自动化的不断发展&#xff0c;各种不同品牌、型号的设备需要进行数据交互和通信。在实际应用中&#xff0c;EH流量计作为一种常用的流量测量设备&#xff0c;常常需要与其他设备进行连接和通信。而Profibus DP是一…...

mysql配置输入错误密码3次后锁定60s

mysql配置输入错误密码3次后锁定60s 1、安装插件 INSTALL PLUGIN CONNECTION_CONTROL SONAME connection_control.so; INSTALL PLUGIN CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS SONAME connection_control.so; 2、验证是否安装成功 SHOW VARIABLES LIKE connection_control…...

首屏优化,webpack插件用于给html中js自动添加异步加载属性

因为要使用cheerio库&#xff0c;需要安装 npm安装 npm install cheerio --save-dev或使用 yarn安装 yarn add cheerio --dev创建async-script-webpack-plugin.js const cheerio require(cheerio);class AsyncScriptWebpackPlugin {constructor(options {}) {this.options …...

SQLite 数据库常见问题及解决方法

一、数据库文件锁定问题 1. 问题表现 在多线程或多进程环境下访问 SQLite 数据库时&#xff0c;常常会出现数据库文件被锁定的情况。当一个进程对数据库执行写操作时&#xff0c;其他进程的读写操作都会被阻塞&#xff0c;导致应用程序出现卡顿甚至无响应。比如在移动应用开发…...

day 23

机器学习管道 pipeline 一般通用pipeline的实现流程&#xff1a; 1.构建多个转换器&#xff08;transformer&#xff09;&#xff0c;来实现对特征的预处理 2.构建 ColumnTransformer&#xff0c;将不同的预处理应用于不同的列子集&#xff0c;构造一个完备的转化器 3.构建…...

MATLAB复制Excel数据到指定区域

Matlab中如何将Excel表中的265-528行F-AA列数据复制到1-263行AE-AZ中 版本&#xff1a;MatlabR2018b clc; clear; %旧Excel文件名 oldFile ; %新Excel文件名 newFile ; % 工作表名称&#xff08;旧表和新表一致&#xff09; sheetName Sheet1; % 旧文件中待复制的数据范…...

docker配置mysql主从同步

1. 创建Docker网络 docker network create mysql-network 2. 创建数据卷 docker volume create mysql-master-volume docker volume create mysql-slave-volume 3. 准备MySQL配置文件 主库配置 (master.cnf) [mysqld] server-id1 log-binmysql-bin binlog_formatROW gtid_mo…...

机动车授权签字人备考考试题库及答案

一、单选题 13、《中华人民共和国大气污染防治法》规定,进口、销售超过污染物排放标准的机动车、非道路移动机械的,由县级以上人民政府(  )按照职责没收违法所得,并处货值金额一倍以上三倍以下的罚款,没收销毁无法达到污染物排放标准的机动车、非道路移动机械。 A、生态…...

WebGL图形编程实战【6】:性能优化 × 调试工具与技巧精讲

调试工具 NVIDIA Nsight Systems NVIDIA Nsight Systems 这个工具帮助开发者深入了解应用程序在CPU、GPU 和网络通信等各个层面的运行情况&#xff0c;从而有效地识别性能瓶颈并进行优化 WebGL-Inspector 插件的地址在这&#xff1a;WebGL-Inspector chrome插件 但是在这里…...

69、微服务保姆教程(十二)容器化与云原生

容器化与云原生 在微服务架构中,容器化和云原生技术是将应用程序部署到生产环境的核心技术。通过容器化技术,可以将应用程序及其依赖项打包成一个容器镜像,确保在任何环境中都能一致运行。而云原生技术则通过自动化的容器编排系统(如 Kubernetes),实现应用的动态扩展、自…...

CSS3(BFC)

CSS3(BFC) 1、什么是BFC W3C 上对 BFC 的定义&#xff1a; 原文&#xff1a;Floats, absolutely positioned elements, block containers (such as inline-blocks, table- cells, and table-captions) that are not block boxes, and block boxes with ‘overflow’ other tha…...

OrangePi Zero 3学习笔记(Android篇)7 - ftdi_sio

目录 1. 内核配置 2. SPI设备 3. 验证 这部分需要基于之前修改的ftdi_sio驱动&#xff0c;增加MPSSE部分的代码。 1. 内核配置 一般默认USB转串口是关闭的&#xff0c;所以需要配置打开。在源代码根目录下执行&#xff1a; ./longan/build.sh menuconfig 菜单进入顺序&a…...

自适应蒙特卡洛定位-AMCL

自适应蒙特卡洛定位&#xff0c;简称AMCL&#xff0c;主要提供定位功能并以/tf形式输出 蒙特卡洛算法的基本思想&#xff1a;当所要求的问题是某种事件出现的概率或者是某个变量的期望值时&#xff0c;它们可以通过某种"试验"的方法&#xff0c;得到这种事件出现的概…...

用python清除PDF文件中的水印(Adobe Acrobat 无法删除)

学校老师发的资料&#xff0c;有时候会带水印&#xff0c;有点强迫症的都想给它去掉。用Adobe Acrobat试了下&#xff0c;检测不到水印&#xff0c;无法删除&#xff01;分析发现原来这类PDF文件是用word编辑的&#xff0c;其中的水印是加在了页眉中&#xff01; 自己动手想办法…...

bootstrap自助(抽样)法

一&#xff0c;概念 一言以蔽之&#xff1a;从训练集中有放回的均匀抽样——》本质就是有放回抽样&#xff1b; 自助法&#xff08;bootstrap&#xff09;是一种通过从数据集中重复抽样来估计统计量分布的非参数方法。它可用于构建假设检验&#xff0c;当对参数模型的假设存在…...

综合实验二之删除/boot目录,进行系统修复

实验三、删除/boot目录&#xff0c;进行系统修复 在 Linux 系统中&#xff0c;/boot 目录是一个至关重要的系统目录&#xff0c;主要用于存放系统启动时所需的核心文件和配置信息。 /boot 目录的主要作用&#xff1a; 存放内核文件&#xff08;Kernel&#xff09; vmlinuz&…...

postgresql主从集群一键搭建脚本分享

脚本1&#xff1a; cat pg_ms_install.sh #!/bin/bash # 基础环境配置&#xff08;保持不变&#xff09; setenforce 0 >/dev/null 2>&1 || true sed -i "s/SELINUXenforcing/SELINUXdisabled/" /etc/selinux/config systemctl stop firewalld >/dev/n…...

融合一致性与差异性约束的光场深度估计

摘要&#xff1a;光场图像深度估计是光场三维重建、目标检测、跟踪等应用中十分关键的技术。虽然光场图像的重聚焦特性为深度估计提供了非常有用的信息&#xff0c;但是在处理遮挡区域、边缘区域、噪声干扰等情况时&#xff0c;光场图像深度估计仍然存在很大的挑战。因此&#…...

转运机器人可以绕障吗?

在工业物流场景中&#xff0c;障碍物动态分布、路径突发拥堵是常态。传统AGV依赖固定轨道或磁条&#xff0c;面对复杂环境时往往“束手无策”。转运机器人可以绕障吗&#xff1f;富唯智能用技术创新给出答案——搭载激光SLAM导航与多传感器融合技术&#xff0c;其转运机器人不仅…...

【Web前端开发】CSS基础

2.CSS 2.1CSS概念 CSS是一组样式设置的规则&#xff0c;称为层叠样式表&#xff0c;用于控制页面的外观样式。 使用CSS能够对网页中元素位置的排版进行像素控制&#xff0c;实现美化页面的效果&#xff0c;也能够做到页面的样式和结构分离。 2.2基本语法 通常都是&#xff…...

【物流开单专用软件】佳易王物流管理系统:常见的物流信息系统以及软件程序实操教程 #物流软件定制#物流软件开发#物流软件推荐

一、概述 软件试用版资源文件下载方法&#xff1a; 【进入头像主页第一篇文章最后 卡片按钮 可点击了解详细资料 或左上角本博客主页 右侧按钮了解具体资料信息】 本实例以 佳易王物流管理系统 为例说明&#xff0c;其他版本可参考本实例。试用版软件资源可到文章最…...

力扣-94.二叉树的中序遍历

题目描述 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 class Solution { public:void inorder(TreeNode* root, vector<int>& res){//C这里&一定要加if(!root)return;inorder(root->left,res);res.push_back(root->val);inorder(ro…...

对基于再生龙制作的Linux系统的硬盘进行扩容

背景 公司一个仪器产品是基于x86核心板开发的&#xff0c;因此制作系统镜像时用的再生龙软件&#xff0c;好处是制作的系统镜像比ARM平台那种raw image小很多&#xff0c;缺点是操作有点麻烦。 最近客户反馈512GB的SSD硬盘容量不够&#xff0c;因此公司决定升级成1TB的&#x…...

Spring Boot 注解详细解析:解锁高效开发的密钥

一、引言 Spring Boot 以其快速开发、自动配置等特性&#xff0c;成为构建 Java 应用程序的热门框架。而注解在 Spring Boot 中扮演着至关重要的角色&#xff0c;它们如同魔法指令&#xff0c;简化了配置流程&#xff0c;增强了代码的可读性与可维护性。本文将深入剖析 Spring…...

【速写】KV-cache与解码的再探讨(以束搜索实现为例)

文章目录 1 Beam Search 解码算法实现2 实现带KV Cache的Beam Search解码3 关于在带kv-cache的情况下的use_cache参数 1 Beam Search 解码算法实现 下面是一个使用PyTorch实现的beam search解码算法&#xff1a; 几个小细节&#xff1a; 束搜索可以加入length_penalty&#…...

ElasticSearch聚合操作案例

1、根据color分组统计销售数量 只执行聚合分组&#xff0c;不做复杂的聚合统计。在ES中最基础的聚合为terms&#xff0c;相当于 SQL中的count。 在ES中默认为分组数据做排序&#xff0c;使用的是doc_count数据执行降序排列。可以使用 _key元数据&#xff0c;根据分组后的字段数…...