fork,source和exec运行脚本时的差异
来源:互联网 发布:劲霸男装淘宝店 编辑:程序博客网 时间:2024/05/21 11:11
fork
使用 fork 方式运行 script 时, 就是让 shell(parent process) 产生一个 child process 去执行该 script, 当 child process 结束后, 会返回 parent process, 但 parent process 的环境是不会因 child process 的改变而改变的.
source
使用 source 方式运行 script 时, 就是让 script 在当前 process 内执行, 而不是产生一个 child process 来执行. 由于所有执行结果均于当前 process 内完成, 若 script 的环境有所改变, 当然也会改变当前 process 环境了.
exec
使用 exec 方式运行script时, 它和 source 一样, 也是让 script 在当前process内执行, 但是 process 内的原代码剩下部分将被终止. 同样, process 内的环境随script 改变而改变.
结论:通常如果我们执行时,都是默认为fork的。大家可以通过pstree命令看看关于父子进程的关系。如上,如果想让父进程得到子进程的环境变量,就是source方式了
1.sh的脚本
3.1 fork
3.3 exec
使用 fork 方式运行 script 时, 就是让 shell(parent process) 产生一个 child process 去执行该 script, 当 child process 结束后, 会返回 parent process, 但 parent process 的环境是不会因 child process 的改变而改变的.
source
使用 source 方式运行 script 时, 就是让 script 在当前 process 内执行, 而不是产生一个 child process 来执行. 由于所有执行结果均于当前 process 内完成, 若 script 的环境有所改变, 当然也会改变当前 process 环境了.
exec
使用 exec 方式运行script时, 它和 source 一样, 也是让 script 在当前process内执行, 但是 process 内的原代码剩下部分将被终止. 同样, process 内的环境随script 改变而改变.
结论:通常如果我们执行时,都是默认为fork的。大家可以通过pstree命令看看关于父子进程的关系。如上,如果想让父进程得到子进程的环境变量,就是source方式了
1.sh的脚本
#!/bin/bashA=Becho "PID for 1.sh before exec/source/fork:$$"export Aecho "1.sh: \$A is $A"case $1 in exec) echo "using exec…" exec ./2.sh ;; source) echo "using source…" . ./2.sh ;; *) echo "using fork by default…" ./2.sh ;;esacecho "PID for 1.sh after exec/source/fork:$$"echo "1.sh: \$A is $A"2.sh的脚本
#!/bin/bashecho "PID for 2.sh: $$"echo "2.sh get \$A=$A from 1.sh"A=Cexport Aecho "2.sh: \$A is $A"3. 实验
3.1 fork
PID for 1.sh before exec/source/fork:259921.sh: $A is Busing fork by default…PID for 2.sh: 259932.sh get $A=B from 1.sh2.sh: $A is CPID for 1.sh after exec/source/fork:259921.sh: $A is B3.2 source
PID for 1.sh before exec/source/fork:259941.sh: $A is Busing source…PID for 2.sh: 259942.sh get $A=B from 1.sh2.sh: $A is CPID for 1.sh after exec/source/fork:259941.sh: $A is C注意: 三个PID都是25994, 子程序的环境变量被带了出来.
3.3 exec
PID for 1.sh before exec/source/fork:259971.sh: $A is Busing exec…PID for 2.sh: 259972.sh get $A=B from 1.sh2.sh: $A is C注意: 主程序的剩下部分不执行了.
- fork,source和exec运行脚本时的差异
- fork source exec区别差异
- fork source exec区别差异
- *exec,source和fork的区别*
- *exec,source和fork的区别*
- *exec,source和fork的区别*
- fork/source/exec的区别
- linux中的fork, source和exec的区别
- shell脚本调用另一个脚本的三种不同方法(fork, exec, source)
- 在shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)
- 在shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)
- shell脚本中调用另一个脚本的三种不同方法(fork, exec, source(.))
- 在shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)
- 在shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)
- 在shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)
- 在shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)
- 在shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)
- 在shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)
- 《编写可读代码的艺术》读书笔记(二)
- 考试系统——需求的思考
- hdu 4301 - Divide Chocolate(简单dp)
- Chronometer实现简单计数器
- C# 视频监控系列(1):准备
- fork,source和exec运行脚本时的差异
- 大话设计模式-单一职责原则 /封闭开放原则
- JavaSwing图形界面编程之内存图像(一)
- C# 视频监控系列(2):客户端——封装API
- HDOJ 4301 —— DP
- Struts2学习笔记(一)
- C#封装的海康DVR客户端SDK
- Java高级特性之构造方法(一)
- VC数据库编程 调用ADO的常用方法