在bash shell中,source、exec以及sh均可以用来执行shell script,可是它们的差异在哪里呢?
sh:父进程会fork一个子进程,shell script在子进程中执行
source:在原进程中执行,不会fork子进程
exec:在原进程中执行,可是同时会终止原进程
shell
注:使用export会把父进程中的变量向子进程中继承,可是反过来却不行,在子进程中,无论环境若是改变,均不会影响父进程bash
下面用一个例子来说解.net
下面在命令行中去执行命令行
./1.sh forkblog
能够看到,1.sh是在父进程中执行,2.sh是在子进程中执行的,父进程的PID是5344,而子进程的是5345,当子进程执行完毕后,控制权返回到父进程。同时,在子进程改变环境变量A的值不会影响到父进程。继承
./1.sh source进程
由结果可知,1.sh和2.sh都是在同一进程中执行的,PID为5367ip
./1.sh execget
可知,两个脚本都是在同一进程中执行,可是请注意,使用exec终止了原来的父进程,所以,能够看到it
这两个命令没有执行
由这个例子,便大体可了解它们的区别了