在 bash 中,能夠使用控制操做符 &
讓命令在後臺運行,而後使用 wait
內置命令等待任務完成。shell
查看 man bash 對控制操做符 &
的說明以下:bash
If a command is terminated by the control operator &, the shell executes the command in the background in a subshell.
The shell does not wait for the command to finish, and the return status is 0.
即,當要執行的命令以 &
結尾時,這個命令會在後臺子 shell 執行。
當前 shell 不會等待這個命令執行完成,能夠繼續執行下一個命令。併發
即,某個命令執行耗時較久時,若是不以 &
結尾,當前 shell 會等待該命令執行完成,才能執行下一個命令。
而以 &
結尾後,這個命令被放到後臺子 shell 執行,當前 shell 能夠繼續執行下一個命令。ide
查看 help wait 對該命令的說明以下:測試
wait: wait [-n] [id ...]
Wait for job completion and return exit status.
Waits for each process identified by an ID, which may be a process ID or a job specification, and reports its termination status.
If ID is not given, waits for all currently active child processes, and the return status is zero.
If ID is a a job specification, waits for all processes in that job's pipeline.If the -n option is supplied, waits for the next job to terminate and returns its exit status.code
即,wait
命令能夠等待指定 PID 的進程執行完成。
若是不提供任何參數,則等待當前激活的全部子進程執行完成。進程
當有多個耗時操做能夠併發執行,且這些操做都執行完成後,再進行下一步操做,就能夠使用 wait
命令來等待這些操做執行完成。ip
相似於下面的語句:ci
command1 & command2 & wait
command1 &
命令用 &
指定在後臺執行 command1 命令。
若是執行 command1 命令須要較長時間,不加 &
的話,須要等待 command1 執行完成,才能執行下一個命令。
加了 &
後,在後臺執行 command1 命令,能夠繼續執行下一個命令。it
相似的,command2 &
也是在後臺執行 command2 命令。
即,經過 &
在後臺併發執行 command1、command2 命令,能夠更好地利用 CPU 併發能力,加快執行速度。
若是先等待 command1 執行完成,再來執行 command2 命令,可能會比較慢。
以後執行 wait
命令,沒有提供任何參數,會等待全部激活的的子進程執行完成,在後臺執行的子進程也是激活狀態。
這裏會等待 command1、command2 都執行完成。
這裏的 command1、command2 只是舉例用的名稱,實際測試時要換成能夠執行的命令。