Shell中fork/source/exec的区别

简介:

 fork是linux的系统调用,用来创建子进程,子进程是父进程的一个副本,从父进程那里获得一定的资源分配以及继承父进程的环境。子进程与父进程唯一不同的地方在于pid(process id)。环境变量(传给子进程的变量,遗传性是本地变量和环境变量的根本区别)只能单向从父进程传给子进程。不管子进程的环境变量如何变化,都不会影响父进程的环境变量。默认shell中的命令都是此种方式,创建sub-shell,然后执行。执行完后,返回父shell。

 

exec和source都属于bash内置命令,执行source和exec的过程中都不会产生新的进程,被调用的脚本与父脚本在同一个Shell进程内执行。source和exec的区别在于exec调用一个新脚本以后, 父脚本中exec行之后的内容就不会再执行了。所以被调用的脚本中声明的变量和环境变量,都可以在主脚本中得到和使用


总结:

source命令: 不创建子进程,在当前Shell进程中执行脚本,
exec命令:  不创建子进程, 在当前Shell进程中执行脚本, 父脚本中exec行之后的内容不会执行

fork属于系统调用, 会创建一个子进程, 父进程会阻塞等待子进程执行结束, 然后继续往下执行



本文转自 kuSorZ 51CTO博客,原文链接:http://blog.51cto.com/kusorz/1827679

相关文章
|
Linux Shell 文件存储
【Linux技术专题】「夯实基本功系列」带你一同学习和实践操作Linux服务器必学的Shell指令(深入df和dh的区别和探索)
【Linux技术专题】「夯实基本功系列」带你一同学习和实践操作Linux服务器必学的Shell指令(深入df和dh的区别和探索)
389 1
shell脚本变量 $name ${name}啥区别
shell脚本变量 $name ${name}啥区别
|
Shell Docker 容器
使用exec模式与shell模式,执行ENTRYPOINT和CMD的区别
结合 `exec`与 `shell`模式,`ENTRYPOINT`与 `CMD`在Docker容器启动时的交互方式展现出不同的特点。选择哪种模式,取决于对执行环境的纯净度、性能需求以及是否需要利用shell特性。理解这些细微差别,有助于更精细地控制容器的行为,优化应用部署与管理流程。
342 0
|
JSON Java Shell
Dockerfile中RUN、CMD、ENTRYPOINT、SHELL命令的区别
理解这些指令的差异和应用场景,有助于构建高效、灵活且易于管理的Docker镜像。在实际应用中,根据需要选择合适的指令,可以有效地控制镜像构建和容器运行的行为。
708 0
|
资源调度 网络协议 Shell
在Linux中,Linux内核和Shell有何区别?
在Linux中,Linux内核和Shell有何区别?
|
Shell Linux
Linux环境变量之shell中export定义全局变量和echo 变量的区别
Linux环境变量之shell中export定义全局变量和echo 变量的区别
|
Shell
shell 单引号和双引号区别
shell 单引号和双引号区别
138 0
|
弹性计算 运维 Shell
Shell 脚本的 fork 炸弹
【4月更文挑战第29天】
88 0
|
Shell Linux C语言
Linux中执行Shell的函数(popen,system,exec)介绍:分享一些常用的执行Shell的函数及其相关编程技巧和经验
Linux中执行Shell的函数(popen,system,exec)介绍:分享一些常用的执行Shell的函数及其相关编程技巧和经验
567 0
|
Shell 测试技术 Python
如何在Bash Shell脚本中使用`exec`命令?
如何在Bash Shell脚本中使用`exec`命令?
509 0