在 Bash 中 fork
本文介绍了用于fork新的异步子进程的 C/C++ 分叉系统调用的 Bash 等效项(即子 shell)的介绍性教程。
在 Bash 中fork
C/C++中的系统调用是创建一个新的进程,即调用进程的子进程。 创建新进程后,两个进程将异步执行。
两者都有自己的地址空间。 没有一个进程会在其执行结束之前等待其他进程结束; 然而,在 Bash 中,这些子进程被称为子 shell。
这些子 shell 并行运行,允许同时完成多个任务。 因此,Bash 中的 fork 功能可以通过创建新的子 shell 来实现。
要创建子 shell,我们遵循以下语法:
(sub_process) &
我们将要作为子进程执行的函数或任何代码行括在括号中,然后放置一个 &
符号。 这些括号内的所有语句都将构成一个子进程并作为子 shell 执行。
考虑以下示例:
在这个例子中,我们创建了函数 child_process()
并编写了一些语句。 后来,我们通过将它括在括号中并在末尾放置一个 & 来调用该函数。
这样,该函数将在子 shell 中调用。 Parent shell 将同时执行它的下一条语句。
我们可以从输出中看到,父进程(因为它同时运行)在子进程可以处理其打印语句之前打印了下一条语句。
子shell中的变量
就变量而言,所有 shell,无论是父 shell 还是子 shell,都会有它们的变量。 由于两者都有自己的地址空间,进程最终会有单独的局部变量。
让我们看下面的例子:
在这个脚本中,我们在父进程中创建了一个变量 local_var 并设置了它的值。 稍后在 child_process 函数中,我们为子 shell 分配了一个新值。
创建子进程后,父进程打印变量的值,因此父进程的值将被打印。
输出将如下所示:
从上面的输出我们可以看出,局部变量在子进程的代码块之外是不可访问的。 即使是父进程也无法访问子进程设置的值。
相关文章
在 Bash 中运行 find -exec 命令
发布时间:2024/03/14 浏览次数:127 分类:操作系统
-
本文将演示如何使用 find 命令的 -exec 参数来使用 find 命令定位文件中的任何文本。