zoukankan      html  css  js  c++  java
  • fork exec source的区别

    参考:http://www.cnblogs.com/bkygg/p/5023072.html

    1:fork  运行的时候开一个sub_shell 执行调用的脚本,sub_shell执行的时候,parent_shell还在。sub_shell执行完毕后返回parent_shell。sub_shell从parent_shell继承环境变量。但是sub_shell中的变量不会带回parent_shell。在子命令执行完后再执行父命令,子级的环境变量不会影响到父级

    2:exec 执行子级的命令后,不再执行父级的后面的命令
       
    3:source 执行子级命令后继续执行父级的命令,同时子级设置的环境变量会影响到父级的环境变量
          与fork的区别是不新开一个sub_shell来执行被调用的脚本,而是在同一个shell中执行,所有被调用的脚本中的声明的变量和环境变量,都可以在主脚本中得到使用
     
    例子理解:
    1.sh
    #!/bin/bash
    
    A=B
    #$$表示当前进程的PID
    echo "PID for 1.sh before exec/source/fork:$$"
    export A 
    echo "1.sh: $A is $A"
    case $1 in
        exec)
             echo "using exec......"
             exec ./2.sh;;
        source)
             echo "using source......"
             source ./2.sh;;
        *)
             echo "using fork by default......"
             ./2.sh;;
    esac
    echo "PID for 1.sh after exec/source/fork:$$"
    echo "1.sh: $A is $A"
    ~                    

    2.sh

    #!/bin/bash
    echo "PID for 2.sh:$$"
    echo "2.sh get $A=$A from 1.sh"
    A=C
    export A
    echo "2.sh:$A is $A"

    执行的结果:

    [root@lile shell]# ./1.sh fork
    PID for 1.sh before exec/source/fork:21852
    1.sh: $A is B
    using fork by default......
    PID for 2.sh:21853
    2.sh get $A=B from 1.sh
    2.sh:$A is C
    PID for 1.sh after exec/source/fork:21852
    1.sh: $A is B
    [root@lile shell]# ./1.sh source
    PID for 1.sh before exec/source/fork:21862
    1.sh: $A is B
    using source......
    PID for 2.sh:21862
    2.sh get $A=B from 1.sh
    2.sh:$A is C
    PID for 1.sh after exec/source/fork:21862
    1.sh: $A is C
    [root@lile shell]# ./1.sh exec
    PID for 1.sh before exec/source/fork:21863
    1.sh: $A is B
    using exec......
    PID for 2.sh:21863
    2.sh get $A=B from 1.sh
    2.sh:$A is C
  • 相关阅读:
    ~虚拟现实论文~
    Vega Prime Distributed 模块的中文总结
    怎样在程序中使用vgPicker移动物体
    黑客档案
    在VBA中连接SQL SERVER数据库
    VC中调用Matlab引擎的设置
    在VB应用程序中单击按钮打开word文档
    matlab调用ansys的方法
    实现VC与Matcom的接口步骤
    vega编程中文资料
  • 原文地址:https://www.cnblogs.com/lemon-le/p/5917803.html
Copyright © 2011-2022 走看看