linux - 并行运行 bash shell 并等待

标签 linux bash shell parallel-processing

我在一个目录中有 100 个文件,我想分几个步骤处理每个文件,而第 1 步很耗时。所以伪代码是这样的:

for filename in ~/dir/*; do
  run_step1 filename >${filename}.out &
done

for outfile in ~/dir/*.out; do
  run_step2 outfile >${outfile}.result
done

我的问题是如何检查给定输入文件的第 1 步是否已完成。我曾经在 C# 中使用 threads.join,但不确定 bash shell 是否具有等效项。

最佳答案

看起来你想要:

for filename in ~/dir/*
do
    (
    run_step1 $filename >${filename}.out
    run_step2 ${filename}.out >${filename}.result
    ) &
done
wait

这会在单独的子 shell 中处理每个文件,首先对每个文件运行第 1 步,然后运行第 2 步,但会并行处理多个文件。

您唯一需要担心的问题是确保您不会尝试并行运行太多进程。您可能需要考虑 GNU parallel

您可能想编写一个简单的脚本(doit.sh,也许):

run_step1 "$1" > "$1.out"
run_step2 "$1.out" > "$1.result"

然后从并行调用该脚本,每次调用一个文件。

关于linux - 并行运行 bash shell 并等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23135759/

相关文章:

python - 如何在Python中获取实际的shell提示符字符串?

linux - 红帽 6.4 上的 Datastax Enterprise 5.0.0

linux - 在 Debian 系统上安装 Debian 软件包时如何读取输入

linux - openbox 不会设置正确的窗口大小

linux - Bash - 将命令输出管道化到 while 循环中

linux - 结合 grep 和 find 以获得所需的结果

xml - 使用 shell 脚本从 xml 文件中提取最新版本

linux - 如何保护shell脚本代码

python - 分组和删除文件

linux - 如何找到所有唯一的文件名(消除重复项和路径)