fork source exec区别差异
结论:通常如果我们执行时,都是默认为fork的。大家可以通过pstree命令看看关于父子进程的关系。如上,如果想让父进程得到子进程的环境变量,就是source方式了
* fork ( /directory/script.sh)
fork是最普通的, 就是直接在脚本里面用/directory/script.sh来调用script.sh这个脚本.
运行的时候开一个sub-shell执行调用的脚本,sub-shell执行的时候, parent-shell还在。
sub-shell执行完毕后返回parent-shell. sub-shell从parent-shell继承环境变量.但是sub-shell中的环境变量不会带回parent-shell
*
exec (exec /directory/script.sh)
exec与fork不同,不需要新开一个sub-shell来执行被调用的脚本. 被调用的脚本与父脚本在同一个shell内执行。但是使用exec调用一个新脚本以后, 父脚本中exec行之后的内容就不会再执行了。这是exec和source的区别
*
source (source /directory/script.sh)
与fork的区别是不新开一个sub-shell来执行被调用的脚本,而是在同一个shell中执行. 所以被调用的脚本中声明的变量和环境变量, 都可以在主脚本中得到和使用.
可以通过下面这两个脚本来体会三种调用方式的不同:
1.sh
#!/bin/bash
A=B
echo " ID for 1.sh before exec/source/fork $"
export A
echo "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 ;;
esac
echo " ID for 1.sh after exec/source/fork $"
echo "1.sh: \$A is $A"
2.sh
#!/bin/bash
echo " ID for 2.sh: $$"
echo "2.sh get \$A=$A from 1.sh"
A=C
export A
echo "2.sh: \$A is $A"
执行情况:
$ ./1.sh
PID for 1.sh before exec/source/fork:5845364
1.sh: $A is B
using fork by default…
PID for 2.sh: 5242940
2.sh get $A=B from 1.sh
2.sh: $A is C
PID for 1.sh after exec/source/fork:5845364
1.sh: $A is B
$ ./1.sh exec
PID for 1.sh before exec/source/fork:5562668
1.sh: $A is B
using exec…
PID for 2.sh: 5562668
2.sh get $A=B from 1.sh
2.sh: $A is C
$ ./1.sh source
PID for 1.sh before exec/source/fork:5156894
1.sh: $A is B
using source…
PID for 2.sh: 5156894
2.sh get $A=B from 1.sh
2.sh: $A is C
PID for 1.sh after exec/source/fork:5156894
1.sh: $A is C
$
fork source exec区别差异相关推荐
- linux中fork, source和exec的区别
shell的命令可以分为内部命令和外部命令. 内部命令是由特殊的文件格式.def实现的,如cd,ls等.而外部命令是通过系统调用或独立程序实现的,如awk,sed. source和exec都是内部命令 ...
- c++中的fork函数_linux c语言 fork() 和 exec 函数的简介和用法
linux c语言 fork() 和 exec 函数的简介和用法 假如我们在编写1个c程序时想调用1个shell脚本或者执行1段 bash shell命令, 应该如何实现呢? 其实在<stdli ...
- 进程fork和exec ---Unix网络编程笔记
进程fork和exec ---Unix网络编程笔记 fork 一次调用,两次返回 fork的两个典型用法 最简单的并发服务器---fork子进程 exec -Unix网络编程笔记) fork #inc ...
- linux c语言 fork() 和 exec 函数的简介和用法
假如我们在编写1个c程序时想调用1个shell脚本或者执行1段 bash shell命令, 应该如何实现呢? 其实在<stdlib.h> 这个头文件中包含了1个调用shell命令或者脚本的 ...
- python中exec是什么意思_Python中的进程分支fork和exec详解
在python中,任务并发一种方式是通过进程分支来实现的.在linux系统在,通过fork()方法来实现进程分支. 1.fork()调用后会创建一个新的子进程,这个子进程是原父进程的副本.子进程可以独 ...
- 三文鱼肉质和虹鳟鱼肉质有什么区别差异
三文鱼是世界上最热销的一种水产食材,但很多人都听说市场上出售的三文鱼多是用虹鳟鱼假冒而成的,于是人们就特别想知道,虹鳟鱼和三文鱼之间有什么关系,想知道它们之间有什么不同?今天就对虹鳟鱼和三文鱼之间的区 ...
- 什么是CTG线路?和CN2线路有什么区别差异?
什么是CTG线路?和CN2线路有什么区别差异? 什么是CTG线路? Ctgnet(as23764)是中国电信全球有限公司(CTG)新建的国际多业务承载网.为企业客户提供定制的国际互联网专线接入服务(G ...
- “Import from external model” 与 “Create from existing source”的区别
"Import from external model" 与 "Create from existing source"的区别 学习java一段时间,最近想捣鼓 ...
- fork join、fork join_any、fork join_none的区别
在Verilog中我们对线程(即独立运行的程序,分为父线程和子线程)的使用有: 1.begin--end块 (顺序执行) 2.fork----join块 (并行执行) 而在SV中又增加了两种新的创建线 ...
最新文章
- LPSTR, LPCSTR ,LPTSTR,LPCSTR,LPWSTR LPCWSTR
- 专家支招:手把手教你如何选型移动CRM
- 爱之箭发射(las)
- ThinkPHP 模型方法 setInc() 和 setDec()
- bzoj4152 The Captain (dijkstra)
- ProtoBuff3.0.0在Ubuntu上安装
- 3-4HDFS的特点
- linux: chmod,chown命令详解
- shell 基础知识
- weblogic-开发模式转变为生产模式生产模式转变为开发模式
- 28留数及其应用(四)
- 蒋涛:《Orange’S:一个操作系统的实现》属于真正Hacker的
- 微信小程序 JavaScript(JS)字符串转gbk(无需下载,无需积分)
- CDA Level1复盘总结
- GRBL分析:gcode解释器(二)
- Vue+element搭建后台管理系统-二、安装插件
- CCNet: Criss-Cross Attention for Semantic Segmentation阅读笔记
- FlashFXP 便携版,U盘版,真正绿色
- 【Java学习002】Java-ArrayList源码解析
- 公众号欢迎各位大佬投稿
热门文章
- 用python turtle库画正方形_用Python Turtle画一个正方形
- oracle创建数据库用户并授权,oracle创建数据库、表空间、用户并授权
- [渝粤教育] 西南政法大学 法理学 参考 资料
- 【渝粤教育】21秋期末考试成本会计10168k2
- [渝粤教育] 中国地质大学 高级会计学 复习题
- [渝粤教育] 中国地质大学 马克思主义基本原理 复习题
- 【渝粤教育】电大中专公共基础课程_1作业 题库
- 【渝粤题库】国家开放大学2021春3979会计学概论题目
- 无线传感器主要应用领域及发展趋势
- c++冒泡排序代码_【开源推荐】数据结构和算法必知必会的50个代码实现