diff --git a/src/shell_and_shell_script/learn_shell.md b/src/shell_and_shell_script/learn_shell.md index a4dcaf0..a43e1bb 100644 --- a/src/shell_and_shell_script/learn_shell.md +++ b/src/shell_and_shell_script/learn_shell.md @@ -156,6 +156,33 @@ Shell 中有一些系统变量,它们在 Shell 启动时自动设置,例如 - `$0`:启动当前终端程序或者 ShellScript 的命令,如 `/bin/bash` - `$#`:启动当前终端程序或者 ShellScript 的参数个数。 +## 进程 + +在学习上一章节的时候,你是否会疑惑:为什么执行一个新的 Shell 就可以在一个不影响原本 Shell 的环境中工作呢? + +实际上,我们在执行一个命令的时候,Shell 会为这个程序开启一个新进程。那什么叫做进程呢?你可以把它理解为你给计算机派发的一个任务。你只需要派发任务就好了,而计算机要考虑的事情就多了。(划掉)计算机负责执行这个进程,操作系统给它分配系统资源。 + +我们每个人都有自己的父母,进程也是一样。例如,进程 A 启动了进程 B,那么进程 A 就是进程 B 的父进程(也可以称之为母进程)。 + +一般情况下,进程的环境变量只能向下传递。也就是当父进程启动了一个子进程的时候,子进程会继承父进程的环境变量。但是这时集成的只是父进程在创建子进程时环境变量的一个快照,以后父进程中环境变量更新的时候不会影响子进程。 + +我们可以通过实例来了解一下这个问题。 + +```sh +$ export TEST=114514 +$ echo $TEST +114514 +$ bash # 启动一个新的 Shell 进程 +$ echo $TEST +114514 # 从父进程那里继承了环境变量 +$ export TEST=1919810 # 尝试修改变量 +$ echo $TEST +1919810 +$ exit # 回到父进程 +$ echo $TEST +114514 # 父进程的环境变量没有被改变 +``` + ## 管道 Shell 中的管道是链接两个命令的方式,管道遵守下面的格式。