在LINUX下, 通過腳本執行一些命令, 通常需要執行好幾個腳本共同完成任務, 這裏的調用有3種方式:
fork方式
這是最常用的方式, 直接通過: /path/xx.sh 就可以啦。
task.sh:
#!/bin/shell
/export/home/baijiwei/run.sh
這裏, task.sh本身啓動了一個進程, 假設進程ID爲10000,它會啓動一個新的shell 來執行run.sh, 假設其進程ID爲10001, 這裏進程10001 繼承了10000所有的環境變量, 但是進程10001 本身的環境變量10000不能使用;
在整個過程, 進程10000 和10001同時存在知道進程10001執行完畢。
exec方式
#!/bin/shell
exec /export/home/baijiwei/run.sh
...
與前面的fork方式類似, 不同點在於: 經過exec啓動的進程, 不會產生新的進程, 而是直接使用task.sh的進程, 但是在run.sh執行結束返回之前, task.sh會一直被block着。
source 方式
#!/bin/shell
source /export/home/baijiwei/run.sh
...
它會爲run.sh新產生一個shell, 而且task.sh可以使用run.sh裏面的變量和環境變量;
通過下面的表格來展示一下他們的異同:
方式 | 產生子shell | 共享sub-shll的變量 |
---|---|---|
fork | 是 | 否 |
exec | 否 | 是 |
source | 是 | 是 |