冷月nuanyang 发表于 2023-5-13 22:43:10

5.2 shell的父子关系

用于登录某个虚拟控制器终端或在GUI中运行终端仿真器时所启动的默认的交互shell,是一个父shell。
在CLI提示符后输入/bin/bash命令或其他等效的bash命令时,会创建一个新的shell程序,这个shell程序被称为子shell(child shell)。子shell也拥有CLI提示符,同样会等待命令输入。
当输入bash、生成子shell的时候,是看不到任何相关信息的,因此需要另一条命令帮助理清这一切。

第一次使用ps -f的时候,显示出了两个进程。其中一个进程的ID是2994(第二列),运行的是bash shell程序(最有一列)。另一个进程(进程ID17024)对应的是命令ps -f。
输入命令bash之后,一个子shell就出现了,第二个ps -f是在子shell中执行的。可以从显示结果中看到有两个bash shell程序在运行,第一个bash shell程序,也就是父shell进程,其原始进程ID是2994.第二个bash shell程序,即子shell进程,其PID是17254指明了这个父shell进程就是该子shell的父进程
在生成子shell进程时,只有部分父进程的环境被复制到子shell环境中。这会对包括变量在内的一些东西造成影响。
子shell(child shell,也叫subshell)可以从父shell中创建,也可以从另一个子shell中创建。

在上面的例子中,bash命令被输入了三次。这实际上创建了三个子shell。ps --forest命令展示了这些子shell间的嵌套结构。
ps -f命令也能够表现子shell的嵌套关系,因为它能够通过PPID列显示出谁是谁的父进程。

bash shell程序可使用命令行参数修改shell启动方式

可以输入man shell获得关于bash命令的更多帮助信息,了解更多的命令行参数。bash --help命令也会提供一些额外的帮助
可以利用exit命令退出子shell
exit命令不仅能退出shell,还能用来登出当前的虚拟控制台或终端仿真器软件,只需要在父shell中输入exit,就能够退出CLI
页: [1]
查看完整版本: 5.2 shell的父子关系