父子shell

不同的脚本执行方式产生的父子shell

1. source和. ,执行脚本,只在当前的sehll环境中执行生效
2. 指定bash sh 解释器运行脚本,是开启subshell,开启子shell运行脚本
3. ./script,都会指定shebang,通过解释器运行,也开启subshell运行脚本

父shell的概念

  • pstree看到的结果,就是父shell环境
├─sshd─┬─sshd─┬─bash───pstree
  • ps进程管理命令,查看
ps -ef
-f :显示UID,PID,PPID
-e :列出所有进程的信息,如同-A选项

# 查看进程关系
ps -ef --forest

root       2361   1064  0 09:38 ?        00:00:34  \_ sshd: root@pts/0,pts/1
root       2365   2361  0 09:38 pts/0    00:00:00     \_ -bash
root      27366   2365  0 11:16 pts/0    00:00:00        \_ ps -ef --forest

  • 父shell与子shell关系
父亲
	儿子
		孙子
			曾孙子
# 只要输入exit,就能够退出子shell环境了

学习子shell的意义

当你的多个命令执行时,如果中途有命令无休止执行下去,并且卡住后面的其他操作,就需要开始子shell运行整个无休止的命令,不耽误其他命令的执行

创建进程列表(创建子shell执行命令)

  • 执行一系列的shell命令
ls;cd ~;pwd;
  • shell的进程列表理念,需要使用()小括号,如下执行方式就称之为,进程列表,加上小括号,就是开启子shell运行命令
(ls;cd ~;pwd;)

检测是否在子shell环境中

Linux 默认的有关shell的变量

# 改变量值特点, 如果是0,就是在当前shell环境中执行的,否则就是开辟子shell去运行的
BASH_SUBSHELL
  • 检测是否开启子shell运行命令
[root@localhost shell]# ls;cd ~;pwd;echo $BASH_SUBSHELL
cahnge_more_file  different.sh  hello.py  hello.sh  nohup.out  specical.sh  var.sh
/root
0	# 说明不加扩展,是在当前shell环境运行的
  • 明确开启了子shell运行命令,进程列表,并且开启子shell运行
[root@localhost shell]# (ls;cd ~;pwd;echo $BASH_SUBSHELL)
cahnge_more_file  different.sh  hello.py  hello.sh  nohup.out  specical.sh  var.sh
/root
1	# 加括号就是进行列表,非0 ,表示开辟了子shell去执行

子shell嵌套运行

  • 一个小括号,开启一个子shell运行命令,还可以嵌套多个
[root@localhost ~]# (ls;cd ~;pwd;echo $BASH_SUBSHELL)
anaconda-ks.cfg  ansible  my-docker  shell
/root
1

[root@localhost ~]# (ls;(cd ~;pwd;echo $BASH_SUBSHELL))
anaconda-ks.cfg  ansible  my-docker  shell
/root
2

[root@localhost ~]# (ls;(cd ~;(pwd;echo $BASH_SUBSHELL)))
anaconda-ks.cfg  ansible  my-docker  shell
/root
3

利用括号,开启子shell的理念,以及检查,在shell脚本中,经常会用子shell进行多进程的处理,提高程序并发执行效率

posted @   savagee  阅读(97)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示