导言
本节将就shell交互(脚本执行)过程中涉及子进程(subprocess)以及子SHELL(subshell)的部分,配以实例,进行说明。将详细讨论如下问题:subprocess和subshell是什么
subprocess的产生过程是什么
什么情况下会产生subprocess和subshell
shell编程中,subshell需要注意些什么
如何管理subprocess
subprocess和subshell是什么
子进程(subporcess)是从父子进程的概念出发的。unix操作系统的进程从init进程开始,经过不断fork-exec“繁衍”,形成了树状的父子进程结构。每个进程均有其对应的父进程(0进程不在讨论范畴内),就算是由于父进程先行结束导致的孤儿进程,也会被init(pid=1)领养,使其父进程ID为1。
子SHELL,顾名思义,就是由“当前shell进程”创建的一个子进程。因此,subshell概念是subprocess的子集,一个subshell一定是个subprocess。
subprocess的产生过程
事实上,所有进程的创建,都可视为子进程创建过程。unix操作系统进程的创建,基本可以归结为fork-exec的模式,即是:通过fork创建子进程环境,
通过exec加载并执行进程代码。
在shell环境中,即是:当前shell fork出一个子进程(即子shell),此时该子shell是父shell的一个副本;
在subshell里,根据path指定的目录列表里的目录,找到外部命令com