fork source exec区别差异

fork   使用 fork 方式运行 script 时, 就是让 shell(parent process) 产生一个 child   process 去执行该 script, 当 child process 结束后, 会返回 parent process,   但 parent process 的环境是不会因 child process 的改变而改变的. source   使用 source 方式运行 script 时, 就是让 script 在当前 process 内执行, 而不   是产生一个 child process 来执行. 由于所有执行结果均于当前 process 内完成,   若 script 的环境有所改变, 当然也会改变当前 process 环境了. exec   使用 exec 方式运行script时, 它和 source 一样, 也是让 script 在当前process   内执行, 但是 process 内的原代码剩下部分将被终止. 同样, process 内的环境随   script 改变而改变.
结论:通常如果我们执行时,都是默认为fork的。大家可以通过pstree命令看看关于父子进程的关系。如上,如果想让父进程得到子进程的环境变量,就是source方式了 
     * fork ( /directory/script.sh)
     fork是最普通的, 就是直接在脚本里面用/directory/script.sh来调用script.sh这个脚本.
     运行的时候开一个sub-shell执行调用的脚本,sub-shell执行的时候, parent-shell还在。
     sub-shell执行完毕后返回parent-shell. sub-shell从parent-shell继承环境变量.但是sub-shell中的环境变量不会带回parent-shell
     *
      exec (exec /directory/script.sh)
     exec与fork不同,不需要新开一个sub-shell来执行被调用的脚本. 被调用的脚本与父脚本在同一个shell内执行。但是使用exec调用一个新脚本以后, 父脚本中exec行之后的内容就不会再执行了。这是exec和source的区别
     *
      source (source /directory/script.sh)
     与fork的区别是不新开一个sub-shell来执行被调用的脚本,而是在同一个shell中执行. 所以被调用的脚本中声明的变量和环境变量, 都可以在主脚本中得到和使用.

可以通过下面这两个脚本来体会三种调用方式的不同:
1.sh 
     #!/bin/bash
     A=B
    echo &quot ID 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…"
                    . ./2.sh ;;
            *)
                    echo "using fork by default…"
                    ./2.sh ;;
    esac
    echo &quot ID for 1.sh after exec/source/fork $"
    echo "1.sh: \$A is $A"
2.sh 
     #!/bin/bash
     echo &quot ID for 2.sh: $$"
    echo "2.sh get \$A=$A from 1.sh"
    A=C
    export A
    echo "2.sh: \$A is $A"
      
      
     执行情况:
     $ ./1.sh 
    PID for 1.sh before exec/source/fork:5845364
    1.sh: $A is B
    using fork by default…
    PID for 2.sh: 5242940
    2.sh get $A=B from 1.sh
    2.sh: $A is C
    PID for 1.sh after exec/source/fork:5845364
    1.sh: $A is B
    $ ./1.sh exec
    PID for 1.sh before exec/source/fork:5562668
    1.sh: $A is B
    using exec…
    PID for 2.sh: 5562668
    2.sh get $A=B from 1.sh
    2.sh: $A is C
    $ ./1.sh source
    PID for 1.sh before exec/source/fork:5156894
    1.sh: $A is B
    using source…
    PID for 2.sh: 5156894
    2.sh get $A=B from 1.sh
    2.sh: $A is C
    PID for 1.sh after exec/source/fork:5156894
    1.sh: $A is C
    $

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351003.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LOJ2980 THUSC2017大魔法师(线段树+矩阵乘法)

线段树每个节点维护(A,B,C,len)向量&#xff0c;操作即是将其乘上一个矩阵。 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; #define ll long lo…

在ECR上推送Spring Boot Docker映像

在先前的博客中&#xff0c;我们将Spring Boot应用程序与EC2集成在一起。 它是您可以在Amazon Web Services上进行的最原始的部署形式之一。 在本教程中&#xff0c;我们将使用我们的应用程序创建一个docker映像&#xff0c;该映像将存储到Amazon EC2容器注册表中 。 您需要安…

Linux信号处理机制

在Linux中&#xff0c;信号是进程间通讯的一种方式&#xff0c;它采用的是异步机制。当信号发送到某个进程中时&#xff0c;操作系统会中断该进程的正常流程&#xff0c;并进入相应的信号处理函数执行操作&#xff0c;完成后再回到中断的地方继续执行。 需要说明的是&#xff0…

pyspider爬虫框架

特点&#xff1a; 去重处理&#xff0c;结果监控&#xff0c;多进程处理&#xff0c;pyquery提取&#xff0c;错误重试&#xff0c;webUI管理&#xff0c;代码简洁&#xff0c;JS渲染 安装&#xff1a; anaconda里边没搜到pyspider&#xff0c;所以手动安装 查看pyspider的命令…

matlab subplot同时显示多幅图像

subplot是MATLAB中的函数。 使用方法&#xff1a;subplot&#xff08;m,n,p&#xff09;或者subplot&#xff08;m n p&#xff09;。 subplot是将多个图画到一个平面上的工具。其中&#xff0c;m表示是图排成m行&#xff0c;n表示图排成n列&#xff0c;也就是整个figure中有n个…

matlab var求方差

对二维数组a b1 var(a); % 按默认来求 b2 var(a, 0); % 默认的公式&#xff08;用N-1&#xff09; c1 var(a, 1); % 另外的公式&#xff08;用N&#xff09; d1 var(a, 0, 1); % 对每列操作&#xff08;用N-1&#xff09; d2 var(a, 0, 2); % 对每行操作&#xff08;…

1. git基础

1. 安装git sudo apt-get install git 2. 注册 git config --global user.name "Your Name" git config --global user.email "emailexample.com" 3. 创建版本库 mkdir learngit cd learngitgit init ##将这个目录初始化成…

国外persona用户画像_使用Mozilla Persona验证用户的指南

国外persona用户画像到目前为止&#xff0c;只有Twitter和Facebook身份验证&#xff0c;我决定将Mozilla Persona添加到我最新项目&#xff08; 计算机 &#xff0c;计算机生成的音乐&#xff09;的列表中。 为什么&#xff1f; 我喜欢尝试新事物 存储密码是一个艰巨的过程&a…

每天一个linux命令(41):ps命令

Linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照&#xff0c;就是执行ps命令的那个时刻的那些进程&#xff0c;如果想要动态的显示进程信息&#xff0c;就可以使用top命令。 要对进程进行监测和控制&#x…

module.js:549 throw err;

解决方法&#xff1a; 1、有可能是拼写错误 2、未明原因。 &#xff08;1&#xff09;删除 node_modules 文件夹 &#xff08;2&#xff09;cnpm cache clean&#xff0c;不过提示错误就用 cnpm cache clean --force &#xff08;3&#xff09;cnpm install 如果还是显示错误就…

matlab zeros初始化为0矩阵

zeros为创建一个值为零的数组&#xff1b; 如matrix1zeros(4,5);%4*5的矩阵&#xff0c;矩阵中每个元素都为0 matrix2zeros(4,5,3);%4*5*3的数组&#xff0c;数组中每个元素都为0 下面举一个将图像存到数组的例子 对RGB图片1.jpg&#xff0c;2.jpg&#xff1b;大小为700*500…

在一个Java版本上运行Eclipse IDE,但在另一个Java版本上运行

Java™开发人员 &#xff08;和其他Java开发人员变体&#xff09;的Eclipse IDE本身就是用于构建Java应用程序的Java应用程序。 这种关系可能会让您的大脑有些奇怪。 Eclipse IDE几乎完全用Java编写&#xff0c;需要Java运行时环境&#xff08;JRE&#xff09;才能运行。 JRE仅…

1.6.4 分离原则: 策略同机制分离,接口同引擎分离

在Unix之失的讨论中&#xff0c;我们谈到过X系统的设计者在设计中的基本抉择是实行“机制&#xff0c;而不是策略”这种做法——使X成为一个通用图形引擎&#xff0c;而将用户界面风格留给工具包或者系统的其它层次来决定。这一点得以证明是正确的&#xff0c;因为策略和机制是…

十、LINQ查询之延迟执行

一、IEnumerable 来实现延迟加载 转载于:https://www.cnblogs.com/fger/p/10644549.html

matlab中“存储空间不足,无法处理此命令”

关于matlab中“存储空间不足&#xff0c;无法处理此命令” 前一段在matlab中绘制三维图片以及处理三维大数据时&#xff0c;电脑上出现了“存储空间不足&#xff0c;无法处理此命令”的提示&#xff0c;我便到网上查找一些相关的解决方案&#xff0c;但是很可惜&#xff0c;在…

inline用法详解

&#xff08;一&#xff09;inline函数&#xff08;摘自C Primer的第三版&#xff09; 在函数声明或定义中函数返回类型前加上关键字inline即把min&#xff08;&#xff09;指定为内联。 inline int min(int first, int secend) {/****/}; inline函数对编译器而言必须是可见的&…

matlab mat文件

如果想在matlab关闭后变量的值依然存在&#xff0c;就需要将变量保存在文件里&#xff0c;这里将变量保存为mat文件。 &#xff08;1&#xff09;将数组保存到mat文件 matrix1magic(4); save(matrix1.mat,matrix1); &#xff08;2&#xff09;需要使用mat文件时&#xff0c…

休眠日志:常见问题的提示和解决方案

如何通过适当的日志记录解决一些最常见的Hibernate问题&#xff1f; Hibernate的日志记录配置是一个重要但很少讨论的主题。 正确的配置可以帮助您在开发过程中发现潜在的问题&#xff0c;而错误的配置则可以在生产中导致严重的性能问题。 这就是我在新书《 Hibernate提示》中…

jdbc工具类2..0

一、创建外部文件 urljdbc:mysql:///qy66 useroot passwordroot drivercom.mysql.jdbc.Driver 二、创建工具类 package cn.zhouzhou;import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.net.URL; import java.sql.Con…