Shell中source/fork/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属于系统调用, 会创建一个子进程, 父进程会阻塞等待子进程执行结束, 然后继续往下执行

时间: 2024-10-20 14:03:20

Shell中source/fork/exec的区别的相关文章

linux中fork, source和exec的区别

转:linux中fork, source和exec的区别 shell的命令可以分为内部命令和外部命令. 内部命令是由特殊的文件格式.def实现的,如cd,ls等.而外部命令是通过系统调用或独立程序实现的,如awk,sed. source和exec都是内部命令. fork   使用 fork 方式运行 script 时, 就是让 shell(parent process) 产生一个 child process 去执行该 script, 当 child process 结束后, 会返回 parent

详解shell中source、sh、bash、./执行脚本的区别

复制文章:https://www.jb51.net/article/128918.htm 这篇文章主要介绍了shell中source.sh.bash../执行脚本的区别,需要的朋友可以参考下 1.source命令用法: source FileName 作用:在当前bash环境下读取并执行FileName中的命令.该filename文件可以无"执行权限" 注:该命令通常用命令“.”来替代. 如:source .bash_profile . .bash_profile两者等效. sourc

shell中;;、&、&&之间的区别

;;: command1;command2... --不管command1命令是否执行成功,command2命令都执行. &: command1&command2... --command1命令和command2命令同时执行 &&: command1&&command2... --只在command1命令执行后,才执行command2命令. shell中;;.&.&&之间的区别

[转]shell中 source命令即点空格后面再跟可执行文件的说明

这里记录的是在一个shell脚本里面使用. ./file.sh 和./file.sh 的区别,本文参考了http://www.lslnet.com/linux/dosc1/39/linux-283534.htm (这个蓝森林的东西应该是来源于chinaunix) 来个小实验场景一:vi file1.sh./file2.shecho $NIVEK vi file2.shNIVEK=goupiexport NIVEK chmod 755 file1.sh file2.sh $./file1.sh  

shell 中 exit0 exit1 的区别

exit(0):正常运行程序并退出程序: exit(1):非正常运行导致退出程序: exit 0 可以告知你的程序的使用者:你的程序是正常结束的.如果 exit 非 0 值,那么你的程序的使用者通常会认为你的程序产生了一个错误.在 shell 中调用完你的程序之后,用 echo $? 命令就可以看到你的程序的 exit 值.在 shell 脚本中,通常会根据上一个命令的 $? 值来进行一些流程控制. 原文地址:https://www.cnblogs.com/caicairui/p/8635219

ubuntu系统shell 中source: not found错误

错误: shell脚本中含有source命令运行时提示 source: not found 测试: 运行 ls -l /bin/sh 后显示/bin/sh -> dash 这说明是用dash来进行解析的. 解决方案: 命令行执行:dpkg-reconfigure dash(需要root权限) 在界面中选择no 再运行ls -l /bin/sh 后显示/bin/sh -> bash 原文地址:https://www.cnblogs.com/laien/p/8277617.html

Linux SHELL中sh和bash的区别

什么是SHELL? shell的中文意思就是贝壳,其实比较类似于我们内核的壳.简而言之就是只要能够操作应用程序的接口都能够称为SHELL.狭义的shell指的是命令行方面的软件,广义的SHELL则包括图形界面. SHELL的版本 在鸟哥的私房菜的一书中,介绍了UNIX的版本以及众多的SHELL版本. 早在UNIX年代,发展者众多,所以由于shell依据发展者的不同就有许多版本,比如sh,C SHell,K SHell,还有TCSH等,每一种Shell都各有特点.当然也有我们的bash,bash这

Oracle 中 call 和 exec的区别

今天发现了一个小东西,觉得很有意思,查找了一些资料,跟大家分享一下: 在sqlplus中: 在第三方提供的工具(如:plsqldev) 总结: exec是sqlplus的命令,只能在sqlplus中使用. call是sql命令,任何工具都可以使用,call必须有括号,即例没有参数 call必须有括号,即例没有参数 idle> connect /as sysdba 已连接. sys@PO10> sys@PO10> create procedure p_test is 2 begin 3 n

linux shell 中 printf 与 echo的区别

     echo echo是非常常用的shell命令.参数如下: -e:打开反斜杠字符backslash-escaped的解析,即对/n,/t等字符进行解析,而不视之为两个字符 -E:关闭反斜杠字符的解析,/n作为两个字符,这是系统缺省模式 -n:删除最后的换行 /a : 发出警告铃音(ALERT or CTRL-G (bell)) /b : 退格(BACKSPACE or CTRL-H ) /c : 删除最后的字符及最后的换行(Omit final NEWLINE ) /e : 删除后面的一