父子shell实例
父子shell
- source 和点执行脚本,只在当前shell环境中执行生效
- 指定解释器sh 或bash等,执行脚本,是开启子shell运行脚本命令
- 用绝对路径或相对路径,也都会指定shebang,通过解释器运行,也是开启子shell运行命令
父shell概念
pstree看到如下情况,就是父shell环境
│ └─3*[{gdm}]
├─geoclue───2*[{geoclue}]
├─gnome-keyring-d───3*[{gnome-keyring-d}]
├─gnome-shell-cal───5*[{gnome-shell-cal}]
├─gnome-terminal-─┬─bash───pstree ####
ps进程命令查看
ps -ef
-f 显示UID,PID,PPID
-e 列出所有进程的信息,如同-A选项
ps -ef --forest
root 2886 1 0 14:59 ? 00:00:03 /usr/libexec/gnome-terminal-server
root 2894 2886 0 14:59 ? 00:00:00 \_ gnome-pty-helper
root 2895 2886 0 14:59 pts/0 00:00:00 \_ bash
root 3291 2895 0 15:20 pts/0 00:00:00 \_ bash
root 3338 3291 0 15:21 pts/0 00:00:00 \_ ps -ef --forest
父子shell
父shell发出命令:bash ----->bash的子shell发出命令:bash----->bash的孙shell发出命令:bash-->bash的曾孙shell发出命令: ps --forest
只要输入exit;就能退出子shell环境
创建进程列表(创建子shell执行命令)
假如需要执行一系列shell命令
ls;cd ;pwd;echo "奥里给"
列表,肯定是被包括起来的数据
shell进程列表理念,需要使用()小括号,如下执行方式,就称之为,进程列表
加上小括号,就是开启子shell命令
[root@localhost tmp]# (ls;pwd;cd; echo hello)
! demo1.sh myshell.sh MyVar.sh nohup.out sub_str
/root/tmp
hello
[root@localhost tmp]# ps -ef --forest
检测是否在子shell环境中
#linux默认有关shell的变量
#该变量的值的命令结果是0就是当前shell
BASH_SUBSHELL
[root@localhost tmp]#
[root@localhost tmp]# ls ;pwd;cd;echo $BASH_SUBSHELL
! demo1.sh myshell.sh MyVar.sh nohup.out sub_str
/root/tmp
0
[root@localhost ~]# (ls ;pwd;cd;echo $BASH_SUBSHELL)
anaconda-ks.cfg install.log testyy.sh tmp 公共 模板 视频 图片 文档 下载 音乐 桌面
/root
1
[root@localhost ~]#
为什么要开启子shell,如果要执行一个ping命令,如果直接当前环境使用就会一致执行,无法进行其他操作。
子shell嵌套运行
一个小括号,开启一个子shell运行命令,还可以嵌套多个
[root@localhost ~]# (pwd;(pwd;(echo $BASH_SUBSHELL)))
/root
/root
3
[root@localhost ~]#
利用括号,开启子shell的理念,以及检查,在shell脚本开发中,经常会用子shell进行多进程的处理,提高程序并发执行效率。
还剩下的问题
程序并发执行,
父子shell和后台运行的关系
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!