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"。这稍微复杂一点,但是如果进程中有您不想等待的其他子进程,则可以使用。