zoukankan      html  css  js  c++  java
  • Shell中的exec和source解析(转载)

    原文地址:http://lynnkong.iteye.com/blog/1811254

    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新进程,已经封装好了。

  • 相关阅读:
    贝叶斯思想的实质之我见
    强化学习基础概念理解
    Thinkpad x200用户只能放弃生化危机5(PC版), 希望能全速运行星际争霸2!
    This is it
    今天自己掏腰包去买联通iPhone有几位?
    今天是我的生日:)
    2009已经到来 / 2009 Just the Beginning
    好评如潮的PS3游戏《抵抗2 Resistance2》你玩了吗?
    生化危机5 / BIOHAZARD5 简直就是一款完美的印钞机?(+2009.4.9)
    一部好电影《第九区 District 9》
  • 原文地址:https://www.cnblogs.com/NeilHappy/p/2936402.html
Copyright © 2011-2022 走看看