可执行文件是否在当前外壳程序或子外壳程序中“运行”?

th

我正在运行一个称为hellobash的简单可执行文件它查询用户的输入并打印出响应。我这样运行./hello

提示和用户键入他的响应都在当前外壳中进行,但我认为它应该在其他外壳中运行。我以为是因为您可以使用source在当前shell中运行exe。

谁能向我解释这是如何工作的?

在尝试对此进行研究时,我经常遇到术语“外壳环境”和“外壳上下文”。它们是一样的吗?

库萨兰达

您可能会说出有关当前外壳环境的“外壳环境”,其中包括当前环境变量。该环境由任何已启动的子进程(subshel​​l或其他)继承。

“外壳上下文”是一个不常用的术语,但是我假设它与“过程上下文”等效。对于shell脚本,这将包括shell环境以及当前的shell变量,文件描述符(标准输入,标准输出和标准错误,以及其他任何显式打开的),信号处理程序(随一起安装trap)等。这是一个C程序,流程上下文将在对的调用中继承fork(),但不会在后续exec()调用中继承(只有环境可以在调用后保留下来exec())。

当您运行hello程序时(我假设它是一个Shell脚本),输入和输出发生在正在执行该hello脚本的Shell的上下文中这是“当前外壳”。您键入的外壳./hello是其父外壳,并hello继承其环境。

在内部,父外壳执行afork()exec()调用以启动将最终运行hello脚本的外壳

hello脚本在与启动脚本的位置相同的终端中进行提示的事实仅表示,运行该脚本的外壳程序是该脚本程序所在的当前前台进程。父外壳正在等待它完成。完成后,父外壳将再次成为终端中的前台进程。

当使用source ./hello启动脚本时. ./hello,脚本将在与您键入该命令的shell相同的上下文中执行。这意味着它可能会修改交互式外壳的上下文和环境。例如,它可以更改当前工作目录(更改环境)或安装信号处理程序(更改上下文),并且当脚本完成执行时,这些更改仍将是“活动的”。

如果hello程序是已编译的二进制文件,则它将继承调用外壳程序的环境,但不会共享其上下文(文件描述符等)。由于它不是shell脚本,因此它实际上并没有在subshel​​l中运行。父外壳程序将移入后台,等待程序完成,就像它对外壳程序脚本所做的一样。从父shell的角度来看,启动已编译的二进制文件或shell脚本之间没有区别。

编译后的二进制文件可能不能以source.(点)开头,因为外壳程序不知道如何解释二进制文件。


这个答案有点挥手,但我相信这基本上是正确的。如果需要更正或添加任何内容,请发表评论(或编辑)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

可执行文件包装程序,从PATH的末尾运行原始可执行文件

来自分类Dev

安装的程序可执行文件从错误的位置运行

来自分类Dev

子外壳程序是否有可能在父外壳程序中执行某些操作?

来自分类Dev

尝试在C ++代码中运行C ++可执行文件会暂停程序

来自分类Dev

从任务计划程序不在后台W7中运行可执行文件

来自分类Dev

如何运行可执行文件(应用程序/ x-可执行文件)?

来自分类Dev

在Windows cmd中,如何在当前目录中运行可执行文件(而不是在%PATH%中具有相同名称的可执行文件)而不引用完整路径?

来自分类Dev

正在运行的进程是否会损坏其目录中的可执行文件和文件(当前正在使用)

来自分类Dev

外壳数学是否在子外壳中运行?

来自分类Dev

对于托管语言,是否需要将语言运行时嵌入到 Web 程序集可执行文件中?

来自分类Dev

从VSIX安装程序包运行shell命令或可执行文件?

来自分类Dev

如何从打包的Electron应用程序运行可执行文件

来自分类Dev

如何在C程序运行时中正确调用可执行文件?

来自分类Dev

AIX:更改正在运行的程序的可执行文件

来自分类Dev

a.out linux可执行文件是哪个程序?

来自分类Dev

如何制作Python程序的可执行文件?

来自分类Dev

a.out linux可执行文件是哪个程序?

来自分类Dev

无法从mkbundle的可执行文件加载程序集

来自分类Dev

MSI 安装程序的可执行文件

来自分类Dev

是否可以分发使用 C 生成的可执行文件的 Java 桌面应用程序?

来自分类Dev

指定的任务可执行文件“ cmd.exe”无法运行。指定的可执行文件不是此OS平台的有效应用程序

来自分类Dev

在哪里可以找到文件系统中的应用程序可执行文件?

来自分类Dev

在哪里可以找到文件系统中的应用程序可执行文件?

来自分类Dev

使可执行文件在Linux中运行而无提示

来自分类Dev

在dockerfile中运行可执行文件

来自分类Dev

在Java的“沙箱”中运行可执行文件

来自分类Dev

在Jmeter中运行C可执行文件(测试)

来自分类Dev

当从Gradle项目运行可执行文件时,是否捆绑在JavaFX中?

来自分类Dev

子外壳程序是否可以并发运行?

Related 相关文章

  1. 1

    可执行文件包装程序,从PATH的末尾运行原始可执行文件

  2. 2

    安装的程序可执行文件从错误的位置运行

  3. 3

    子外壳程序是否有可能在父外壳程序中执行某些操作?

  4. 4

    尝试在C ++代码中运行C ++可执行文件会暂停程序

  5. 5

    从任务计划程序不在后台W7中运行可执行文件

  6. 6

    如何运行可执行文件(应用程序/ x-可执行文件)?

  7. 7

    在Windows cmd中,如何在当前目录中运行可执行文件(而不是在%PATH%中具有相同名称的可执行文件)而不引用完整路径?

  8. 8

    正在运行的进程是否会损坏其目录中的可执行文件和文件(当前正在使用)

  9. 9

    外壳数学是否在子外壳中运行?

  10. 10

    对于托管语言,是否需要将语言运行时嵌入到 Web 程序集可执行文件中?

  11. 11

    从VSIX安装程序包运行shell命令或可执行文件?

  12. 12

    如何从打包的Electron应用程序运行可执行文件

  13. 13

    如何在C程序运行时中正确调用可执行文件?

  14. 14

    AIX:更改正在运行的程序的可执行文件

  15. 15

    a.out linux可执行文件是哪个程序?

  16. 16

    如何制作Python程序的可执行文件?

  17. 17

    a.out linux可执行文件是哪个程序?

  18. 18

    无法从mkbundle的可执行文件加载程序集

  19. 19

    MSI 安装程序的可执行文件

  20. 20

    是否可以分发使用 C 生成的可执行文件的 Java 桌面应用程序?

  21. 21

    指定的任务可执行文件“ cmd.exe”无法运行。指定的可执行文件不是此OS平台的有效应用程序

  22. 22

    在哪里可以找到文件系统中的应用程序可执行文件?

  23. 23

    在哪里可以找到文件系统中的应用程序可执行文件?

  24. 24

    使可执行文件在Linux中运行而无提示

  25. 25

    在dockerfile中运行可执行文件

  26. 26

    在Java的“沙箱”中运行可执行文件

  27. 27

    在Jmeter中运行C可执行文件(测试)

  28. 28

    当从Gradle项目运行可执行文件时,是否捆绑在JavaFX中?

  29. 29

    子外壳程序是否可以并发运行?

热门标签

归档