我希望在循环中运行多个后台进程,但只想等待所有这些进程完成,仍然允许另一个后台进程继续。
在做了一些研究之后,我只看到需要我列出我想要的每个进程 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
命令将它们全部列出。这可能吗?
只是有什么问题
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)