父子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进行多进程的处理,提高程序并发执行效率
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具