创建子shell
在当前shell 使用bash 命令即可创建子shell程序, 在子shell上还可以继续创建子shell ,… 。
例子:
使用命令 ps -f 查看进程信息(程序运行后就是进程,它可以反应程序运行的状态信息)
user1@localhost:~> ps -f
输出结果:
第一行含义:UID表示启动该进程的用户名(用户ID);PID是进程ID;PPID是父进程ID;CMD是启动该进程的程序名
第二行进程PID是3044 运行的是bash shell程序,
第三行进程PID是3142 对应上面执行的命令 ps -f
UID PID PPID C STIME TTY TIME CMD
user1 3044 3041 0 15:59 pts/1 00:00:00 /bin/bash
user1 3142 3044 0 16:05 pts/1 00:00:00 ps -f
创建子shell
user1@localhost:~> bash
再次 ps -f 查看,显示信息多出了一个进程(PID为3149在第二行第二列), 它的PPID(父进程ID)是3044, 说名它是进程ID3044的子shell程序
user1@localhost:~> ps -f
UID PID PPID C STIME TTY TIME CMD
user1 3044 3041 0 15:59 pts/1 00:00:00 /bin/bash
user1 3149 3044 0 16:06 pts/1 00:00:00 bash
user1 3173 3149 0 16:06 pts/1 00:00:00 ps -f
可以在子shell程序上继续创建子shell
user1@localhost:~> bash
user1@localhost:~> bash
通过 PID 和 PPID 可以清楚看到这些bash shell的父、子、孙关系
user1@localhost:~> ps -f
UID PID PPID C STIME TTY TIME CMD
user1 3044 3041 0 15:59 pts/1 00:00:00 /bin/bash
user1 3149 3044 0 16:06 pts/1 00:00:00 bash
user1 3252 3149 0 16:23 pts/1 00:00:00 bash
user1 3275 3252 0 16:23 pts/1 00:00:00 bash
user1 3297 3275 0 16:23 pts/1 00:0
ps --forest 命令以树状形式显示父子级关系
user1@localhost:~/test> ps --forest
PID TTY TIME CMD
3746 pts/1 00:00:00 bash
4453 pts/1 00:00:00 \_ bash
4477 pts/1 00:00:00 \_ bash
5163 pts/1 00:00:00 \_ bash
5196 pts/1 00:00:00 \_ ps
按 Ctrl+D 或输入exit 命令依次退出子shell程序。
他们的关系图
继承关系
在父shell 创建局部变量,在子shell 无法echo 出来,父shell创建的全局变量,子shell 则可以,子shell 对这个全局变量值进行更改并不影响到父shell的全局变量。