【Linux知识】exec命令行详解
文章目录
- 概述
- 主要用途
- 和 bash 有什么区别?
概述
在 Linux 系统中,exec 命令用于执行一个可执行文件,替换当前进程的映像。也就是说,当你在终端中使用 exec 命令后,当前的 shell 会被替换为 exec 指定的程序,并且不会返回原来的 shell。
以下是 exec 命令的一些基本用法和选项:
-
基本用法:
exec [OPTION]... COMMAND [ARG]... -
选项:
-a name:设置新进程的命令名称为name。-c:使用 COMMAND 的环境变量。-e path:使用path作为新进程的文本段。-l [COMMAND]或--login [COMMAND]:像登录 shell 一样运行 COMMAND。-v:显示版本信息并退出。--help:显示帮助信息并退出。
-
示例:
- 替换当前 shell 为
bash:exec bash - 替换当前 shell 为
vim编辑器,并设置新进程的命令名称为vi:exec -a vi vim
- 替换当前 shell 为
请注意,一旦使用了 exec,当前的 shell 就会被替换,除非你使用 exec 来启动一个新的 shell(比如 exec bash),否则你不会回到原来的 shell。这意味着如果你在脚本中使用 exec,脚本执行完毕后不会有任何返回,因为 exec 已经替换了当前的 shell 进程。
主要用途
exec 命令在 Linux 和 Unix 系统中的用途广泛,以下是一些具体的用途和相应的例子:
-
替换当前 shell:
- 用途:当你想要完全切换到另一个程序,并且不再返回到当前 shell 时。
- 例子:
这条命令会用exec vimvim编辑器替换当前的 shell,一旦退出vim,原来的 shell 将不会恢复。
-
运行后台进程:
- 用途:在后台运行一个进程,并且不阻塞当前 shell。
- 例子:
这条命令创建了一个管道文件exec 3<>/tmp/mypipe ; some_command <&3 >&3 3<&-/tmp/mypipe并将其与文件描述符 3 绑定,然后执行some_command,其输入输出都通过这个管道进行,而当前 shell 仍然可用。
-
重定向标准输入输出:
- 用途:将程序的标准输入输出重定向到文件。
- 例子:
这会将exec > output.txt 2> error.txt exec lsls命令的标准输出重定向到output.txt,标准错误重定向到error.txt。
-
改变进程名称:
- 用途:在 ps 命令中显示不同的进程名称。
- 例子:
这会将当前 shell 的进程名称改为exec -a my_program /path/to/programmy_program,而实际执行的是/path/to/program。
-
登录 shell 模式:
- 用途:以登录 shell 的方式执行命令,加载用户的 shell 配置。
- 例子:
这会以登录 shell 的方式启动一个新的 bash shell,加载用户的exec -l bash.bash_profile或.profile。
-
改善脚本性能:
- 用途:在脚本中执行命令时,减少进程数量。
- 例子:
这个脚本创建了一个到#!/bin/bash exec 5<>/dev/tcp/somehost/someport cat >&5 exec 5<&-somehost的someport的 TCP 连接,并将其与文件描述符 5 绑定,然后通过这个连接发送数据。
-
创建守护进程:
- 用途:创建一个守护进程,该进程在后台运行,不占用前台终端。
- 例子:
这条命令会将exec /path/to/daemon &daemon程序放到后台执行,并且不会占用前台终端。
-
环境隔离:
- 用途:为特定程序创建一个全新的环境。
- 例子:
这会为exec -c env /path/to/program/path/to/program创建一个新的环境,其中不包含当前 shell 的环境变量。
这些例子展示了 exec 命令的灵活性和多样性,它可以根据需要以多种方式使用,以适应不同的场景和需求。
和 bash 有什么区别?
exec 命令和 bash 有一些关键的区别,主要体现在它们的行为和用途上:
-
进程替换:
exec用于替换当前的 shell 进程。当你执行exec命令时,当前的 shell 进程会被替换为exec指定的程序,而不会创建新的进程。bash是一个独立的 shell 程序,当你启动bash时,它会创建一个新的进程。
-
返回行为:
- 使用
exec执行命令后,如果命令成功执行,当前的 shell 进程将被替换,不会返回到原来的 shell。 - 使用
bash启动一个新的 shell 会创建一个新的 shell 进程,你可以在新的 shell 中执行命令,并且在执行完毕后可以返回到原来的 shell。
- 使用
-
用途:
exec通常用于脚本中,当你想要替换当前的 shell 环境或者在后台执行一个命令时使用。bash是一个交互式的命令解释器,用于执行用户输入的命令,也可以用于编写和执行 shell 脚本。
-
环境变量和工作目录:
exec会继承当前 shell 的环境变量和工作目录,除非你使用特定的选项来改变这些(比如-a来改变命令名称,或者-e来改变环境变量)。bash在启动时会读取配置文件(如.bashrc或/etc/profile),并设置自己的环境变量和工作目录。
-
脚本中的使用:
- 在 shell 脚本中,
exec可以用来执行一个命令,并替换当前的 shell 进程,这在某些情况下可以减少进程数量,提高效率。 bash通常用于启动一个新的 shell 进程来执行脚本或者命令。
- 在 shell 脚本中,
-
退出状态:
exec命令本身没有退出状态,因为它替换了当前进程。被exec执行的命令的退出状态会成为当前进程的退出状态。bash作为一个新的进程,有自己的退出状态,当bash进程结束时,它的退出状态会被返回。
总结来说,exec 是一个用于替换当前进程的命令,而 bash 是一个独立的 shell 程序,用于解释和执行命令。两者在 shell 编程和命令执行中扮演着不同的角色。
相关文章:
【Linux知识】exec命令行详解
文章目录 概述主要用途和 bash 有什么区别? 概述 在 Linux 系统中,exec 命令用于执行一个可执行文件,替换当前进程的映像。也就是说,当你在终端中使用 exec 命令后,当前的 shell 会被替换为 exec 指定的程序ÿ…...
【学术小白的学习之路】基于情感词典的中文句子情感分析(代码词典获取在结尾)
【学术小白的学习之路】基于情感词典的情感分析 1.基础函数1.1 判断情感词的否定词数量1.2 导入情感词典1.3 切分句子1.3.1为什么划分1.3.2 划分代码 1.4 完整代码 2.导入词典3.中文情感分析算法思路4.1情感词获取思路4.2 计算情感分值4.3 得分的归一化处理 4.实证5.总结 本文的…...
Linux 中 grep、sed、awk 命令
1. awk:强大的文本分析工具 awk,全称“Awk语言”,是一种专门用于处理文本文件的语言。它不仅能够根据关键字匹配某一行,还能进行复杂的文本分析和处理。awk的语法简洁明了,功能强大,是文本处理领域的佼佼者…...
一起考高项啊--现代化基础设施(工业互联网)
1、工业互联网的内涵和外延 工业互联网不是互联网在工作的简单应用,是具有更为丰富的内涵和外延。 它既是工业数字化、网络化、智能化转型的基础设施,也是互联网、大数据、人工智能与实体经济深度融合的应用模式,同时也是一种新业态、新产业…...
python学opencv|读取图像(二十)使用cv2.circle()绘制圆形进阶
【1】引言 前序已经掌握了使用cv2.circle()绘制圆形的基本操作,相关链接为: python学opencv|读取图像(二十)使用cv2.circle()绘制圆形-CSDN博客 由于圆形本身绘制起来比较简单,因此可以自由操作的空间也就大&#x…...
期权懂|如何减小个股期权交易中的风险?
锦鲤三三每日分享期权知识,帮助期权新手及时有效地掌握即市趋势与新资讯! 如何减小个股期权交易中的风险? 一、选择合适的期权合约 (1)选择活跃的期权合约:投资者应优先选择交易活跃的期权合约。交易活跃的…...
ubuntu20.04 wget下载--段错误 (核心已转储)
用wget下载时总是在快下载完成时遇到段错误 untu2004-9.1.0_1.0-1_am 99%[> ] 1.63G 3.11MB/s 剩余 1s s段错误 (核心已转储)有以下两种解决方法: 1.手动下载 wget后面就是要下载的资源的链接,直接复制到浏览器中下载即可 如:…...
怎么样保持mysql和redis数据一致性
保持 MySQL 和 Redis 数据的一致性是一个常见的挑战,因为 MySQL 是传统的关系型数据库,而 Redis 是内存数据库,通常用于缓存和高性能存储。这两者的数据更新方式不同,特别是当 Redis 用作缓存时,可能会存在缓存和数据库之间的数据不一致问题。为了保持数据一致性,通常可以…...
剑指Offer|LCR 013. 二维区域和检索 - 矩阵不可变
LCR 013. 二维区域和检索 - 矩阵不可变 给定一个二维矩阵 matrix,以下类型的多个请求: 计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2) 。 实现 NumMatrix 类: NumMatrix(…...
aosp15 - Activity生命周期切换
本文探查的是,从App冷启动后到MainActivity生命周期切换的系统实现。 调试步骤 在com.android.server.wm.RootWindowContainer#attachApplication 方法下断点,为了attach目标进程在com.android.server.wm.ActivityTaskSupervisor#realStartActivityLock…...
vxe-table 虚拟滚动的动态响应
虚拟滚动主要是在有限范围内渲染想要显示的数据,主要体现在懒加载数据和动态渲染上。如何提高虚拟滚动的操作性呢?请看本章解析 1.什么是虚拟滚动?代码如何实现? VXE-Table提供了一种名为“虚拟滚动”的功能,该功能可…...
quasar dev 命令卡住很久
别以为这是一个瞬间的截图,其实停留在这里很久很久。 折腾挺久,无论npm run dev:proxy还是 quasar dev,都是一样的情况。 最终解决办法: 有语法问题,通过 quasar build 命令暴露出来错误所在的行数。...
黑盒RCE测试 异或测试
前言 了解了漏洞的原理之后就需要知道 他在哪能出现 并且被利用 这个还是很重要的 异或测试 使用异或(XOR)运算进行加密解密的原理_异或加密-CSDN博客 异或测试是在 白盒内执行的 一个例题看一下 输入什么都是会报错 这种情况就需要使用 异或计…...
kotlin中泛型中in和out的区别
概念含义 in关键字(逆变) 在Kotlin泛型中,in关键字主要用于定义逆变(Contravariance)。它表示一个泛型类型参数可以是指定类型或者它的超类型。简单来说,就是对于类型A和B,如果A是B的子类型&…...
c# iis 解决跨域问题
该错误是一个典型的跨域问题,说明从 http://www.fuc.com 发起的请求被目标服务器(https://aip.baidubce.com)拒绝,原因是目标服务器未返回正确的 AccessControlAllowOrigin 响应头。 解决方法 1. 了解问题的本质 CORS(…...
MySQL版本对应的mysql-connector-java版本下载地址
MySQL版本mysql-connector-java版本mysql-connector-java下载地址MySQL安装版下载地址MySQL免安装版下载地址5.1.x5.1.xmysql-connector-java 5.1.xMySQL Installer 5.1.xMySQL Community Server 5.1.x5.5.x5.1.x, 5.5.x mysql-connector-java 5.1.x, mysql-connector-java 5.5…...
【读书笔记】《论语别裁》爱与罪
一、内容摘要 《论语别裁》第01章讨论了孔子关于孝悌的思想,以及其在中国文化中的重要性和复杂性。文中引用了有子的观点,强调孝弟是为人之本。然而,随着历史的发展,孔子的思想也被误解或被用作维护专制统治的工具。通过司马迁的…...
uniApp上传文件踩坑日记
最近在做移动端app,开始接触uniapp。想着直接用PC端的前后端API去做文件上传,但是uniapp的底层把请求拆成了普通请求和文件上传请求,所以不能用一个axios去做所有请求的处理,拆成uni.request和uni.uploadFile去分别处理两种情况。…...
Webhook 是什么?详解其工作原理
在现代技术中,一切都相互连接,每个应用程序通过许多服务的组合和协调实现无缝工作。这种协调是通过 webhooks 实现的。 Webhooks 是基于 HTTP 的回调函数,其中一个服务使用 API 立即通知另一个服务发生的事件。这就是简单的版本。从技术上讲…...
log4j2漏洞复现(CVE-2021-44228)
靶场环境 步骤一:设置出战规则 步骤二:开启靶场 cd vulhub cd log4j cd CVE-2021-44228 docker-compose up -d docker ps 访问端口 靶机开启 步骤三:外带注入 获得dnslog 靶机访问dnslog 得到dnslog的二级域名信息 步骤四:构造…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
QT开发技术【ffmpeg + QAudioOutput】音乐播放器
一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下,音视频内容犹如璀璨繁星,点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频,到在线课堂中知识渊博的专家授课,再到影视平台上扣人心弦的高清大片,音…...
Java高级 |【实验八】springboot 使用Websocket
隶属文章:Java高级 | (二十二)Java常用类库-CSDN博客 系列文章:Java高级 | 【实验一】Springboot安装及测试 |最新-CSDN博客 Java高级 | 【实验二】Springboot 控制器类相关注解知识-CSDN博客 Java高级 | 【实验三】Springboot 静…...
JS设计模式(5): 发布订阅模式
解锁JavaScript发布订阅模式:让代码沟通更优雅 在JavaScript的世界里,我们常常会遇到这样的场景:多个模块之间需要相互通信,但是又不想让它们产生过于紧密的耦合。这时候,发布订阅模式就像一位优雅的信使,…...
智能照明系统:具备认知能力的“光神经网络”
智能照明系统是物联网技术与传统照明深度融合的产物,其本质是通过感知环境、解析需求、自主决策的闭环控制,重构光与人、空间、环境的关系。这一系统由智能光源、多维传感器、边缘计算单元及云端管理平台构成,形成具备认知能力的“光神经网络…...
词法分析和词性标注 自然语言处理
目录 一. 概述 1 不同语言的词法分析 2 英语的形态分析 英语单词的形态还原(和正常英语的词法变化一样) 1.有规律变化单词的形态还原 编辑 2.动词、名词、形容词、副词不规则变化单词的形态还原 3.对于表示年代&…...
