Answers:
#!/bin/bash
command1 &
command2 &
command3 &
wait
command4
wait
(不带任何参数)将等待,直到所有后台进程都退出。
的完整描述wait
了在bash
手册:
wait [-n] [n ...]
等待每个指定的子进程并返回其终止状态。每个都
n
可以是进程ID或作业规范;如果给出了作业说明,则将等待该作业管道中的所有进程。 如果n
未给出,则等待所有当前活动的子进程,并且返回状态为零。 如果提供了该-n
选项,则wait
等待任何作业终止并返回其退出状态。如果n
指定了不存在的进程或作业,则返回状态为127。否则,返回状态为等待的最后一个进程或作业的退出状态。
cmd1 & pids=( $! ); cmd2 & pids+=( $! ); cmd3 & pids+=( $! ); wait "${pids[@]}"
或类似的东西。
PID1=$!
然后使用来等待所有孩子的PIDwait "$PID1" "$PID2" "$PID3"
。这稍微复杂一点,但是如果进程中有您不想等待的其他子进程,则可以使用。