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
  • 相关阅读:
    docker 安装使用jenkins
    docker 安装禅道
    在linux定时执行docker容器的命令不成功
    docker 安装nginx+php
    php发起http请求
    安装docker
    REST(Respresentaional State Transfer 表现层状态转化)
    git 分支操作
    git常用命令
    php多进程编程
  • 原文地址:https://www.cnblogs.com/lemon-le/p/5917803.html
Copyright © 2011-2022 走看看