在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 | 是 | 是 |