在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
這兩個命令沒有執行
由這個例子,便大體可瞭解它們的區別了