`
lynnkong
  • 浏览: 302896 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Shell中的exec和source解析

阅读更多

Shell中的execsource解析

execsource都属于bash内部命令,在讲这两个命令之前,前谈一下fork的概念:
fork
linux的系统调用,用来创建子进程(child process)。子进程是父进程(parent process)的一个副本,从父进程那里获得一定的资源分配以及继承父进程的环境。子进程与父进程唯一不同的地方在于pidprocess 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个函数组成,分别是以exclexecv打头的。
3. exec
system的区别
    1) exec
是直接用新的进程去代替原来的程序运行,运行完毕之后不回到原先的程序中去。
    2) system
是调用shell执行你的命令,system=fork+exec+waitpid,执行完毕之后,回到原先的程序中去。继续执行下面的部分。
也就是说,如果你用exec调用,首先应该fork一个新的进程,然后exec. system不需要fork新进程,已经封装好了。

分享到:
评论

相关推荐

    shell十三问

    exec命令用来执行一个程序,并用该程序替换当前的shell进程,而source是使shell脚本中的命令在当前shell环境中执行,不创建新的子shell。 七、( )与{ }的不同 圆括号()用于创建子shell,其中的命令会在一个新的...

    Shell 十三问(SHELL 13Q)

    - **`source`**:用来在当前Shell环境中执行脚本,使得脚本中的变量和函数定义可以在当前Shell环境中使用。 #### 七、`()`与`{}`的区别 - **`()`**:用于创建子Shell环境,在括号内的命令会在一个新的子Shell中...

    Shell十三问-ChinaUnix精华贴整理2007.pdf

    双引号允许变量扩展和命令替换,而单引号则会严格保留其中的字符串内容,即使包含特殊字符也不会被Shell解析。 ### 6. Var=Value与Export的区别 Var=Value是定义局部变量的标准方式,而Export则用于将变量声明为...

    主要shell内置命令

    Shell是Linux和Unix系统中的一种命令解释器,它允许用户通过命令行接口与操作系统交互。在Shell中,内置命令是直接由Shell执行的,而无需启动新的进程,这使得它们比外部命令更快、更有效率。以下是主要的Shell内置...

    Shell十三问-ChinaUnix精华贴整理

    Shell十三问——ChinaUnix论坛精华贴整理,涵盖了Shell编程中一系列关键的概念和技巧。这篇文章将逐一解析这些问题,帮助读者深入理解Shell脚本编程的核心要素。 1. **简介** Shell是一种命令解释器,它作为用户与...

    Shell十三问.pdf

    Shell 和 Carriage 在这里可能指的是 Shell 语言中的两个概念,但根据上下文来看,这似乎是指向某个特定场景或技术细节。通常情况下,Shell 与 Carriage 并无直接关联。如果此处提及的“Carriage”是指 carriage ...

    SHELL_十三问.pdf

    在Shell脚本中,`var=value`用于声明和初始化变量,而`export`关键字用于将变量声明为环境变量,这意味着该变量不仅在当前Shell中可用,也可以被其子Shell继承。 #### 6. exec与source的差异 `exec`命令用于在当前...

    shell 十三问

    - **source**:又称为`.`命令,用于在当前shell环境中运行一个脚本文件。这样做的好处是可以继承当前环境的所有变量和函数。 #### 7. `()`与 `{}` 的区别 - **`()`**:用于创建子shell环境。在括号中的命令会在一...

    shell经典代码(收藏)

    - **说明**: `for`和`while`是Shell中最常用的循环结构,用于迭代文件内容、文件列表或其他输出流。 - **应用场景**: 数据处理、文件操作等需要重复执行相同任务的场景。 #### 10. 删除空行 - **命令**: - `cat a....

    java调用shell

    在IT领域,特别是软件开发与运维(DevOps)过程中,Java程序调用Shell脚本是一种...通过以上分析,我们可以看到Java调用Shell脚本是一项实用的技术,但在具体应用中需注意细节处理,以确保脚本执行的准确性和稳定性。

    [unix.v6.v7.源码].unix.v6.v7.src.source.code

    源码].unix.v6.v7.src.source.code"是UNIX发展过程中的两个关键版本——V6和V7的源代码,它们在1970年代中期至晚期广泛使用,并为后续的UNIX版本奠定了基础。这些源代码是理解早期UNIX系统工作原理的重要资源,也是...

    Shell编程摘录

    ### Shell编程摘录知识点解析 #### 1. 文件的权限位 在Unix/Linux系统中,文件权限通过一组三位数字表示,分别对应所有者(user)、所属组(group)和其他用户(other)对文件的操作权限。每组数字由三个部分组成,分别是...

    emrex-shell:简单的shell模拟器

    在Unix/Linux系统中,shell通过`fork()`和`exec()`系统调用来创建新进程并执行命令。`emrex-shell`也会模拟这一过程,通过创建子进程来运行用户输入的命令。`fork()`创建一个与父进程相同的副本,而`exec()`则替换子...

    shell脚步-之经典面试70题

    在Shell脚本中,可以通过命令行方式向脚本传递参数。这些参数可以在脚本内部通过特殊的变量`$1`, `$2`, `$3`, 等来访问。其中`$1`代表第一个参数,`$2`代表第二个参数,以此类推。 **示例**: 创建一个名为`...

    UsefulSourceCodes_ForUtilities_source_c_code_utiltities_useful_源

    6. **系统调用**:如`fork()`, `exec()`, `wait()`等,用于创建子进程、执行新程序和等待进程结束,常用于编写shell脚本或者系统级别的工具。 7. **网络编程**:如果源代码涉及到网络工具,可能用到了`socket()`, `...

    vb程序-文档属性查询

    fileProp = shell.Exec("cmd /c dir """ & filePath & """ /q").StdOut.ReadAll ' 提取作者信息 ' (假设文件属性中包含"作者:"关键字) Dim author As String author = ExtractAuthor(fileProp) ' 自定义函数,从...

Global site tag (gtag.js) - Google Analytics