Skip to main content

Bash子shell和并行处理

写好shell脚本的13个技巧 (六月 2025)

写好shell脚本的13个技巧 (六月 2025)
Anonim

shell是在Linux系统上输入命令的基本接口。使用它,您可以直接输入命令或指定包含要执行的命令序列的文件(脚本)。 Shell按层次结构组织,任何shell都可以创建一个新shell。新shell被视为子进程 - 创建它的父shell的子shell。

默认情况下,子shell依赖于其父级,因为如果父进程终止,则子shell也会终止。任何输出都从子shell传递到父shell。

如何创建子shell

在Bash shell脚本中,使用括号表示法创建子shell:

在该示例中,while循环包含在括号中,这使得它在执行脚本文件的shell的子shell中执行。

在后台运行子shell

除非您指定子shell将在后台执行,否则父shell会在继续执行脚本的其余部分之前等待子shell完成。但是,如果要并行运行子shell,则在后台运行它们,这是通过子shell表达式后面的&符号来完成的,如下所示:

并行运行多个子shell

如果您创建多个子shell作为后台进程,则可以并行运行任务。通常,操作系统对每个进程和子进程使用不同的处理器或核心,假设存在至少与进程一样多的处理器或核心。否则,将任务分配给相同的处理器或核心。在这种情况下,处理器或核心在分配的任务之间连续切换,直到任务完成。下一个示例有两个子进程。第一个从1到99计数,第二个从1000到1099。

使用wait语句告诉父进程在继续执行脚本的其余部分之前等待子进程完成:

用于子壳

当需要在特定环境或目录中执行命令时,子shell很有用。如果每个命令在不同的子shell中执行,则不存在变量设置混淆的风险。完成后,不需要还原设置和当前目录,因为父进程的环境不受其任何子进程的影响。

子shell可以在函数定义中使用,以便可以使用不同的参数多次执行它们。