Linux编程 9 (shell类型,shell父子关系,子shell用法)
一. shell类型
1.1 交互式 bin/ shell程序
当用户登录到某个虚拟控制台终端或是在GUI中启动终端仿真器时,默认的shell程序就会开始运行。系统启动什么样的shell程序取决于你个人的用户ID配置,在etc/passwd文件中。如下图所示,root用户使用bash shell作为自己的默认shell程序。
bash shell程序位于/bin目录下,使用长列表可以看出它是一个可执行程序:
像/bin/tcsh 或/bin/dash 或/bin/csh 这些都是shell程序。在我centos 7中没有找到,由于bash shell 使用者最多,很少有人使用其它shell作为默认shell。
1.2 系统 bin/sh程序
除了bash/shell程序还有另外一个默认的shell是/bin/sh。它作为默认的系统shell,用于那些需要在启动时使用的系统shell脚本。在centos 系统中可以看到,使用软链接将默认的系统shell设置成bash shell。这样说来,sh其实就是bash程序。
但注意的是有些发行版系统上,默认的系统shell和默认的交互shell并不相同。例如在Ubuntu发行版中。最后并不是必须一直使用默认的交互shell,可以使用发行版中所有可用的shell。可以直接输入命令/bin/dash来启动dash shell。具体就不在演示。
二. shell的父子关系
2.1 创建子shell
上面说的默认bash shell, 是一个父shell。之前所有章节中所用的交互式shell 都是用的父shell。要创建一个子shell程序很简单,输入bash就会创建一个新的shell程序,被称为子shell。要区分是父shell还是子shell,需要使用前面所学的ps 查看进程命令。
在root用户下,先看没有子shell的父shell进程,如下图所示:
接下来,输入bash,来创建一个子shell, 该子shell的PPID父进程是1748, 对应-bash进程的(PID) 1748。
2.2 子shell创建shell
上面创建的子shell进程为4136。子shell也可以创建一个子shell,子shell再创建子shell。它们的关系如下图所示:
下面来演示下这个关系图的shell创建和它们之前的关系层次。下图中又创建了二个子shell,总共三个子shell。依次是子shell, 孙shell, 曾孙shell。
下图使用ps -f命令也能够通过PPID列出谁是谁的父进程。
注意:生成子shell的成本不低,而且速度还慢,创建嵌套的子shell去处理命令进程性能更为严重。
2.3 退出子shell
通过输入exit命令能有条不絮的退出子shell,例如上面的三个子shell, 首先从曾孙shell退出, 如下图所示:
当没有了子shell时,再输入exit将退出控制台终端。
三. 其它子shell的用法
3.1 进程列表子shell
在shell中,将命令放入括号中,并在命令列表尾部加分号(;)。这样便会创建出一个子线程去执行。是否生成了子shell,需要借助echo $BASH_SUBSHELL,如果该命令返回0,表示没有子shell。 如下图所示:一组命令放入括号中,产生了一个子shell去执行的。
上面说了用命令列表放入括号中,就会创建一个子shell,下面在括号中再套一个括号, 结果是在子shell上创建了子shell。
在shell脚本中,经常会使用子shell进行多进程处理。但采用子shell明显拖慢处理速度。因为它并非真正的多进程处理,因为终端控制着子shell的I/O。
3.2 后台模式子shell
在交互式shell中,一个高效的子shell用法就是使用后台模式,在后台模式中运行命令在处理命令的同时让出CLI,以供他用。 演示后台模式经典命令就是sleep。想要将命令置入后台模式。在命令末尾加上字符&。 结合sleep暂停10秒,通过ps命令来看看。
如下图所示,将sleep命令置入后台模式,在shell CLI提示符([root@hsr ~]#)返回之前,出现了后台作业号1,以及后台作业进程1317。通过ps可以看到,该后台命令进程1317一直在运行。
通过jobs命令可以查看当前后台模式的进程信息(另外jobs -l 显示进程号),如下图所示:
一但10秒过后,后台进程完成,再输入命令jobs,可以看到该命令进程已完成,如下图所示:
3.3 后台模式 进程列表子shell
在3.1中讲到了进程列表子shell, 进程列表是运行在子shell中的一条或多条命令。下面将进程列表置入后台模式,如下所示:当一级子shell的数字1显示在提示符的旁边时,按下回车键。
在使用shell时,很多情况下,可以将命令置入后台模式,例如在前面章节讲到的tar归档,下面演示创建备份文件,有效利用后台模式,下面将mysql的慢日志归档。
将子shell要处理的进程置入后台模式,即可以在子shell中进行繁重的处理工作,又不会让子shell的I/O受制于终端。
转载于:https://www.cnblogs.com/MrHSR/p/9639279.html
Linux编程 9 (shell类型,shell父子关系,子shell用法)相关推荐
- 【Unity3D】3D 物体概念 ① ( 轴心点概念 | 物体的父子关系 | 子节点相对坐标 )
文章目录 一.轴心点概念 二.物体的父子关系 三.子节点相对坐标 一.轴心点概念 3D 物体的 轴心 Pivot , 是 操作的基准点 , 移动物体 时 , 是 轴心点 沿着指定的坐标轴方向移动 ; ...
- Linux shell 学习笔记(3)— shell 父子关系及内建命令
1. shell 类型 只要用户登录到某个虚拟控制台终端或是在 GUI 中启动终端仿真器,默认的 shell 程序就会开始运行. 默认的交互 shell 会在用户登录某个虚拟控制台终端或在 GUI 中 ...
- Mac终端shell类型bash和zsh切换
查看shell类型 可以执行命令echo $SHELL,先查看终端类型. bash: /bin/bash zsh: /bin/zsh shell类型切换命令 切换到bash 输入命令:chsh -s ...
- Linux中shell运行方式,linux脚本中父shell与子shell 执行的几种方式
本文主要介绍以下几个命令的区别: shell subshell source $ (commond) `commond` Linux执行Scripts有两种方式,主要区别在于是否建立subshell ...
- [shell问答录]:命令、进程、子shell...
2019独角兽企业重金招聘Python工程师标准>>> 前些天在CU上讨论一个统计正在执行的脚本数量的问题过程中,发现自己对于shell如何执行命令方面了解还是甚少,惭愧惭愧...期 ...
- Linux编程推荐书籍
Linux编程推荐书籍一览表(转贴) shell 编程 <LINUX与UNIX SHELL编程指南> BASH宝典: Advanced Bash Scripting Guide (如果你使 ...
- aix shell脚本 运行java_Linux中执行shell脚本的4种方法总结
Linux中执行shell脚本的4种方法总结,即在Linux中运行shell脚本的4种方法: 方法一:切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本: 复制代码 代码如下: c ...
- 父Shell与子Shell
父Shell与子Shell Login Shell 登录主机后,在执行Bash Script之前,其实我们已经处于一个BashShell中. 这个Shell叫login Shell,是将来我们执行任何 ...
- 【Linux命令行与Shell脚本编程】第五章 理解 Shell 父子关系 后台进程 协程
Linux命令行与Shell脚本编程 第五章 理解 Shell 文章目录 Linux命令行与Shell脚本编程 五,理解 Shell 5.1,shell的类型 5.2,shell的父子关系 5.2.1 ...
最新文章
- 视觉SLAM学习(三)--------SLAM 综述
- python用户登录_【python】实例-用户登录系统
- SQL2005 用户自定义类型
- 深度学习预训练模型可解释性概览
- python raise
- CCF 201403-1 相反数
- html 无序列表编程一排_HTML 入门笔记
- Jquery实现轮播图效果(fadeIn()和fadeOut()方法的应用)
- elasticsearch5.5.2离线安装x-pack
- 论文自动转代码!IBM印度大三实习生搞了个神奇研究(已中AAAI)
- 已知原函数和导函数的关系_根据函数表达式该如何求函数值
- 剑指Offer——数组中出现次数超过一半的数字
- 【校招VIP】测试脚本语言之系统状态(内存、网络)
- Mysql索引优化和锁机制
- 深度搜索算法(DFS)
- Odoo (hide a menu)隐藏菜单
- FreeRTOS原理剖析:空闲任务分析
- 从输入一个URL地址到浏览器完成渲染的整个过程
- 第十三周项目4—立体类族共有的抽象类
- 项目规划管理 - 4
热门文章
- 计算机网络基础学测,《计算机网络技术基础》第二1章单元学习测习题-20210622072616.docx-原创力文档...
- 获取map第一个的key和value_谁要是再敢用Map传参,我过去就是一JIO
- Cadence IC使用教程
- matlab fft简单小例子,matlabfft简单例子(A simple example of matlabfft).doc
- C语言模块化编程的例子
- 智能卡检测控制系统检测m1这么操作_土壤检测实验室仪器设备配置方案
- 直方图均衡化算法 matlab,matlab程序_retinex_frankle_mccann+直方图均衡化_去雾算法
- PyQt5 笔记6 -- 对话框(QDialog)
- mxnet基础到提高(35)-ndarray
- python3随笔-相关系数