等待后台进程以反向匹配进程 ID 完成

Joh*_*n B 4 bash process

我希望在循环中运行多个后台进程,但只想等待所有这些进程完成,仍然允许另一个后台进程继续。

在做了一些研究之后,我只看到需要我列出我想要的每个进程 IDwait而不是将它们与单个进程 ID 反向匹配的解决方案。似乎像这样的东西wait != $pid会非常有用。

示例脚本:

#!/bin/bash

command1 &
pid=$!
for i in ${array[@]}; do
    for n in $(seq 3); do
        if [ $n -eq 1 ];
            command2 > file &
        else
            command2 >> file &
        fi
    done
done
Run Code Online (Sandbox Code Playgroud)

在此示例中,我希望等待每个进程完成,除非$pid不必使用wait命令将它们全部列出。这可能吗?

msw*_*msw 6

只是有什么问题

wait
Run Code Online (Sandbox Code Playgroud)

作为help wait注释:

等待由 ID 标识的进程,它可以是进程 ID 或作业规范,并报告其终止状态。如果未给出 ID,则等待所有当前活动的子进程,返回状态为零。

您想“仍然允许另一个后台进程继续”?就disown这样。按照你的例子:

command1 & disown %1
command2 & command2 & command2 &
wait
Run Code Online (Sandbox Code Playgroud)