Shell中fork/source/exec的区别
2016-07-19 11:17
381 查看
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属于系统调用, 会创建一个子进程, 父进程会阻塞等待子进程执行结束, 然后继续往下执行
exec和source都属于bash内置命令,执行source和exec的过程中都不会产生新的进程,被调用的脚本与父脚本在同一个Shell进程内执行。source和exec的区别在于exec调用一个新脚本以后, 父脚本中exec行之后的内容就不会再执行了。所以被调用的脚本中声明的变量和环境变量,都可以在主脚本中得到和使用
总结:
source命令: 不创建子进程,在当前Shell进程中执行脚本,
exec命令: 不创建子进程, 在当前Shell进程中执行脚本, 父脚本中exec行之后的内容不会执行
fork属于系统调用, 会创建一个子进程, 父进程会阻塞等待子进程执行结束, 然后继续往下执行
相关文章推荐
- source命令执行SQL脚本文件
- 方便的IE源代码工具Instant Source
- SQL Server 2016里的sys.dm_exec_input_buffer的问题
- VBS中Run和Exec的区别
- PHP 命令行工具 shell_exec, exec, passthru, system详细使用介绍
- js正则表达exec与match的区别说明
- mysql source 命令导入大的sql文件的方法
- Mysql导入导出工具Mysqldump和Source命令用法详解
- php中使用exec,system等函数调用系统命令的方法(不建议使用,可导致安全问题)
- 自定义ubb代码,preg_replace()函数的一些代码
- php 正则表达式学习笔记
- 检测八位数字是否为有效日期的正则
- 向大家推荐一个收集整理正则表达式的网站
- php使用exec shell命令注入的方法讲解
- JS正则表达式详解[收藏]
- PHP 正则 email语句详解
- 经典JavaScript正则表达式实战(附pdf)
- 巧解 JavaScript 中的嵌套替换(强大正则)
- 正则表达式regular expression详述(二)
- 解决preg_match匹配过多字符长度的限制的思路分析