码迷,mamicode.com
首页 > 系统相关 > 详细

shell中sh, exec, source, fork, ./的区别

时间:2019-08-04 10:45:01      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:targe   子进程   无法   get   ora   pid   常用   因子   logs   

https://www.cnblogs.com/cord/p/9226498.html

shell中sh, exec, source, fork, ./的区别

1,sh

sh test.sh

? sh是通过创建子进程(subshell)去执行脚本,父进程无法使用子进程中的变量,而子进程对环境变量的修改也不会影响到父进程。父进程中的局部变量子进程也无法使用,子进程会继承父进程的环境变量;

? 脚本不需要执行权限

2,exec

exec + command
./test.sh exec

? 使用exec执行脚本,被执行的脚本会继承当前shell的环境变量,exec相当于创建了新进程,它会将主进程的进程资源占用,使用主进程的pid,而exec语句执行完之后,后续的语句不再执行;
? 脚本需要执行权限

3,source

source test.sh

? 使用source或者“.”来调用外部脚本,不会产生新的进程,继承当前shell环境变量,而且被调用的脚本运行结束后,它拥有的环境变量和声明变量会被当前shell保留,类似将调用脚本的内容复制过来直接执行。执行完毕后原主shell继续运行。

? 脚本不需要执行权限

4,fork

./test fork

? 使用fork执行脚本的时候会创建一个子进程去执行该脚本,子进程会继承父进程的环境变量和声明变量。当子进程执行完毕后会返回父进程,但是父进程的环境变量不会因子进程的改变而改变。

? 脚本需要执行权限

5,./

./test.sh

? 创建一个子进程去执行脚本

? 脚本需要执行权限

 

在工作中比较常用的是 ./test.sh  或者 sh test.sh 这2个用法一致,都是重新创建了个子进程来执行脚本;

其次我会用source执行,source会继承父进程的一切,没有新建进程。

shell中sh, exec, source, fork, ./的区别

标签:targe   子进程   无法   get   ora   pid   常用   因子   logs   

原文地址:https://www.cnblogs.com/ivyharding/p/11297255.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!