Shell中的exec和source解析

Shell中的exec和source解析

exec和source都属于bash内部命令,在讲这两个命令之前,前谈一下fork的概念:
fork是linux的系统调用,用来创建子进程(child process)。子进程是父进程(parent process)的一个副本,从父进程那里获得一定的资源分配以及继承父进程的环境。子进程与父进程唯一不同的地方在于pid(process id)。环境变量只能单向从父进程传给子进程,不管子进程的环境变量如何变化,都不会影响父进程的环境变量。

脚本的执行:
1. 新产生一个shell然后再执行scripts,也就是通常的sh命令。
一般在scripts文件的开头有如下一行:
#!/bin/sh
2. 在当前shell下执行,不再启用其他shell。
source命令:不再产生新的shell(进程),而在当前shell下执行一切命令。
exec命令:不再产生新的shell(进程),但执行时会把当前的shell process关闭,然后换到后面的命令继续执行。

exec:
1. 系统调用exec是以新的进程去代替原来的进程,但进程的PID保持不变。因此,可以这样认为,exec系统调用并没有创建新的进程,只是替换了原来进程上下文的内容。原进程的代码段,数据段,堆栈段被新的进程所代替
2. exec是一个函数簇,由6个函数组成,分别是以excl和execv打头的。
3. exec与system的区别
    1) exec是直接用新的进程去代替原来的程序运行,运行完毕之后不回到原先的程序中去。
    2) system是调用shell执行你的命令,system=fork+exec+waitpid,执行完毕之后,回到原先的程序中去。继续执行下面的部分。
也就是说,如果你用exec调用,首先应该fork一个新的进程,然后exec. 而system不需要fork新进程,已经封装好了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值