Linux命令的进程关系

一、shell简述

shell是一个命令行解释器工具,它是一个时刻都在运行的程序,当我们在命令行输入命令,shell会去解释执行这个命令。 shell这个工具不止一种,我们使用Linux系统的时候,默认启动的shell 是/etc/passwd 这个字段里记录的shell,下面的是bash shell
在这里插入图片描述
在这里插入图片描述

  • 上面两个图可以看出 bash shell程序位于/bin目录内。而我们去查看这个 /bin/bash文件,就可以可以看出/bin/bash(bash shell)是一个可执行程序:
二、shell的父子关系
  • 1、用于登录某个虚拟控制器终端或在GUI中运行终端仿真器时所启动的默认的交互shell,是一个父shell,我们刚登陆上Linux系统的CLI界面的时候就存在了,可以用ps -f 查看

在这里插入图片描述

  • 2、如果继续在CLI提示符后输入/bin/bash 命令或其他等效的bash 命令时,会创建一个新的shell程序。这个shell程序被称为子shell (child shell)。子shell也拥有CLI提示符,同样会等待命令输入。

在这里插入图片描述
如上图可以看出,第一次什么都不做,使用ps -f 命令,就可以看到 有bash的进程,这个就是父shell, 然后我们再输入bash 命令,输入后,看不出任何变化,但实际上,已经又生成了一个子shell. 从图中可以看出,新生成的子shell的PID是537699,这个shell的父进程是 537377. 然后我们看父shell的PID就是 537377。
在这里插入图片描述

  • 备注:进程就是正在运行的程序。bash shell是一个程序,当它运行的时候,就成为了一个进程。一个运行着的shell就是某种进程而已。因此,在说到运行一个bash shell的时候,你经常会看到“shell”和“进程”这两个词交换使用。

  • 3、连续输入3个bash,我们由上面的信息可以得知,会生成了3个子进程,通过
    ps --forest 这个命令,可以看出进程的父子关系。
    在这里插入图片描述
    在这里插入图片描述

三、在命令行中执行命令
  • 1、我们可以在一行中指定要依次运行的一系列命令。所有的命令都会依次执行

在这里插入图片描述

  • 2、也可以給这些命令加上一个括号,这样的话,系统会生成一个子进程,在子进程里去执行这些个命令。
    在这里插入图片描述

  • 3、要想知道是否生成了子shell,得借助一个使用了环境变量的命令。(环境变量会在第6章中详述。)这个命令就是echo $BASH_SUBSHELL 。如果该命令返回0 ,就表明没有子shell。如果返回1 或者其他更大的数字,就表明存在子shell, 可以看出,加上括号的命令,打印的变量值就是1.

在这里插入图片描述

四、shell的内建命令和非内建命令
  • 1、在学习GNU bash shell期间,你可能听到过“内建命令”这个术语。搞明
    白shell的内建命令和非内建(外部)命令非常重要。内建命令和非内
    建命令的操作方式大不相同。

  • 2、外部命令

    • 外部命令,有时候也被称为文件系统命令,是存在于bash shell之外的程序。它们并不是shell程序的一部分。外部命令程序通常位于/bin、/usr/bin、/sbin或/usr/sbin中。当外部命令执行时,会创建出一个子进程。这种操作被称为衍生(forking)。外部命令ps 很方便显示出它的父进程以及自己所对应的衍生子进程。
  • 3、内建命令

    • 外部命令 和内建命令的区别在于前者不需要使用子进程来执行。它们已经和shell编译成了一体,作为shell工具的组成部分存在。不需要借助外部程序文件来运行。
  • 4、ps 就是一个外部命令。可以使用which 和type 命令找到它。ps 是 外部命令,cd 是内建命令。 分别对ps 和cd ,使用 which和type命令查询 ,可以看出区别。

在这里插入图片描述

  • 总结:内建命令和外部命令在调用的时候。外部命令会创建出一个包含全新环境的子进程,而内建命令则不会,所以外部命令的使用成本更高。内建命令因为不需要创建新环境,所以更高效,不会受到环境变化的影响

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

超级好用的JSON格式化可视化在线工具

JSON是开发非常常用的一种报文格式,最常见的需求就是将JSON进行格式化,最好是有图形化界面显示结构关系,以便进行数据分析。 理想的在线JSON工具,应该支持快速格式化、可压缩、快捷复制、可下载导出,对存在语法错误的地…

【五】【QT开发应用】C++中lambda表达式,值捕获,引用捕获,隐式捕获,lambda表达式的返回类型

Lambda表达式 复盘 Lambda表达式 Lambda 表达式是 C11 引入的一种特性,用于定义匿名函数。它使得可以在代码中方便地定义和使用小段函数,而无需专门定义一个命名的函数。这在需要传递函数作为参数或者需要定义内联函数时非常有用。 基本语法 基本语法…

Apple - Core Text Programming Guide

本文翻译整理自:Core Text Programming Guide(Updated: 2014-09-17 https://developer.apple.com/library/archive/documentation/StringsTextFonts/Conceptual/CoreText_Programming/Introduction/Introduction.html#//apple_ref/doc/uid/TP40005533 文…

docker将容器打包提交为镜像,再打包成tar包

将容器打包成镜像可以通过以下步骤来实现。这里以 Docker 为例,假设你已经安装了 Docker 并且有一个正在运行的容器。 1. 找到正在运行的容器 首先,你需要找到你想要打包成镜像的容器的 ID 或者名字。可以使用以下命令查看所有正在运行的容器&#xff…

高速异地组网怎么办理?

在当今信息化时代,跨地域的远程办公、远程教育、远程医疗等需求越来越多。而高速异地组网作为一种解决不同地区之间快速组建局域网的方法,被广泛应用。本文将介绍一款异地组网内网穿透产品——【天联】,并提供其办理流程。 【天联】组网是什…

【系统设计】如何权衡范式与反范式设计

一、什么是范式设计与反范式设计 1.1、范式设计(Normalization) 定义: 范式设计是数据库设计中最基础的设计原则之一,它主要通过规范化数据模型,减少数据冗余和数据不一致的问题。 常用的范式: 第一范式…

Android Studio main,xml 视图代码转换

Android Studio main,xml 视图&&代码转换 其实很简单,但是对我们小白来说还是比较蒙的。 废话不多说,直接上图。 我的Android Studio 是 4.0 版的 我刚打开是这个界面,在我想学习如何用代码来布局,可能大家也会找不见代码的位置。 follow me 是不是感觉很简单呢。…

基于DE2-115平台的VGA显示实验

一.任务需求 深入了解VGA协议,理解不同显示模式下的VGA控制时序参数(行频、场频、水平/垂直同步时钟周期、显示后沿/前沿等概念和计算方式);通过Verilog编程,在至少2种显示模式下(64048060Hz,102476875Hz&…

Day14——Python文本挖掘数据分析

文章目录 竞争分析-品类分布-适用对象竞争分析-产品结构-拜耳在这里插入图片描述竞争分析-产品结构-拜耳-BCG图竞争分析-产品结构-拜耳-明星竞争分析-产品结构-拜耳-奶牛竞争分析-产品结构-拜耳-问题竞争分析-产品结构-安速-BCG图竞争分析-产品结构-安速-明星竞争分析-产品结构…

vue3项目使用Electron打包成exe的方法与打包报错解决

将vue3项目打包成exe文件方法 一、安装 1.安装electron npm install electron --save-devnpm install electron-builder --save-dev 2.在vue项目根目录新建文件index.js // index.js// Modules to control application life and create native browser window const { app…

Python日志管理利器:如何高效管理平台日志

一、为什么需要日志管理? 日志是应用程序的重要组成部分,它记录了应用程序的运行状态、错误信息以及用户交互等关键信息。良好的日志管理可以帮助开发人员及时发现和解决问题,提高应用程序的稳定性和可靠性。 项目在本地开发调试时&#xf…

AGI的多模态融合

在人工智能的宏伟蓝图中,人工通用智能(AGI)代表着一个集大成者,一个能够理解、学习、适应并执行任何智能任务的系统。随着我们对AGI的探索愈发深入,尤其是在视觉、语言和其他模态的融合上,关于AGI的讨论愈发…

详解DAC数模转换+DAC输出模拟电压的测量比对实验程序

前言:详解DAC数模转换原理DAC输出模拟电压的测量比对实验程序(使用 DAC 通道 1 输出模拟电压,然后通过 ADC1 的通道 1 对该输出电压进行读取,并显示在 LCD 模块上面,DAC 的输出电压可以通过按键(或 USMART&…

PostgreSQL的学习心得和知识总结(一百四十五)|深入理解PostgreSQL数据库之ShowTransactionState的使用及父子事务有限状态机

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《PostgreSQL数据库内核分析》 2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》 3、PostgreSQL数据库仓库…

Kubernetes部署Kanboard看板管理平台

【云原生】Kubernetes部署Kanboard项目管理平台 文章目录 【云原生】Kubernetes部署Kanboard项目管理平台介绍资源列表基础环境一、检查k8s环境1.1、检查工作节点状态1.2、检查系统pod状态 二、编辑kanboard.yaml文件2.1、创建项目目录2.2、编辑kanboard.yaml文件 三、部署Kanb…

Hadoop三大组件原理详解:hdfs-yarn-MapReduce(第9天)

系列文章目录 一、HDFS读写原理【重点】 二、YARN提交mr流程【重点】 三、MapReduce计算流程【重点】 文章目录 系列文章目录前言一、HDFS读写原理[面试]1、HDFS数据写入解析2、HDFS数据读取解析 二、YARN提交mr流程[面试]1. YARN提交mr过程解析 三、MapReduce计算流程[面试]1…

探索监管沙箱在金融科技行业中的应用

一、引言 随着金融科技的快速发展,传统金融机构与科技企业之间的竞争也日趋激烈。为了平衡金融科技创新与风险防控,各国监管机构纷纷引入监管沙箱(Regulatory Sandbox)机制。监管沙箱作为一个受监督的安全测试区,允许金…

MySQL 面试突击指南:核心知识点解析1

MySQL中有哪些存储引擎? InnoDB存储引擎 InnoDB是MySQL的默认事务型引擎,也是最重要、使用最广泛的存储引擎,设计用于处理大量短期事务。 MyISAM存储引擎 在MySQL 5.1及之前版本,MyISAM是默认的存储引擎。它提供了全文索引、压缩、空间函数(GIS)等特性,但不支持事务和…

台积电(TSMC)正在探索采用新型先进芯片封装技术

台积电(TSMC)正在探索采用新型先进芯片封装技术,使用类似面板的矩形基板,以应对日益增长的先进多芯片组处理器需求。据日经亚洲报道,这项开发仍处于早期阶段,可能需要数年时间才能商业化,但如果…

Python酷库之旅-第三方库openpyxl(01)

目录 一、 openpyxl库的由来 1、背景 2、起源 3、发展 4、特点 4-1、支持.xlsx格式 4-2、读写Excel文件 4-3、操作单元格 4-4、创建和修改工作表 4-5、样式设置 4-6、图表和公式 4-7、支持数字和日期格式 二、openpyxl库的优缺点 1、优点 1-1、支持现代Excel格式…