迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 操作系统 >

在 Bash 中 fork

作者:迹忆客 最近更新:2023/06/10 浏览次数:

本文介绍了用于fork新的异步子进程的 C/C++ 分叉系统调用的 Bash 等效项(即子 shell)的介绍性教程。


在 Bash 中fork

C/C++中的系统调用是创建一个新的进程,即调用进程的子进程。 创建新进程后,两个进程将异步执行。

两者都有自己的地址空间。 没有一个进程会在其执行结束之前等待其他进程结束; 然而,在 Bash 中,这些子进程被称为子 shell。

这些子 shell 并行运行,允许同时完成多个任务。 因此,Bash 中的 fork 功能可以通过创建新的子 shell 来实现。

要创建子 shell,我们遵循以下语法:

(sub_process) &

我们将要作为子进程执行的函数或任何代码行括在括号中,然后放置一个 & 符号。 这些括号内的所有语句都将构成一个子进程并作为子 shell 执行。

考虑以下示例:

在 Bash 脚本 1 中fork

在这个例子中,我们创建了函数 child_process() 并编写了一些语句。 后来,我们通过将它括在括号中并在末尾放置一个 & 来调用该函数。

这样,该函数将在子 shell 中调用。 Parent shell 将同时执行它的下一条语句。

在 Bash 输出 1 中fork

我们可以从输出中看到,父进程(因为它同时运行)在子进程可以处理其打印语句之前打印了下一条语句。

子shell中的变量

就变量而言,所有 shell,无论是父 shell 还是子 shell,都会有它们的变量。 由于两者都有自己的地址空间,进程最终会有单独的局部变量。

让我们看下面的例子:

在 Bash 脚本 2 中fork

在这个脚本中,我们在父进程中创建了一个变量 local_var 并设置了它的值。 稍后在 child_process 函数中,我们为子 shell 分配了一个新值。

创建子进程后,父进程打印变量的值,因此父进程的值将被打印。

输出将如下所示:

Bash 输出 2 中的fork

从上面的输出我们可以看出,局部变量在子进程的代码块之外是不可访问的。 即使是父进程也无法访问子进程设置的值。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便