Bash技巧:在腳本中併發執行多個命令,等待命令執行結束

在 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

wait 內置命令

查看 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 命令。

即,經過 & 在後臺併發執行 command1command2 命令,能夠更好地利用 CPU 併發能力,加快執行速度。
若是先等待 command1 執行完成,再來執行 command2 命令,可能會比較慢。

以後執行 wait 命令,沒有提供任何參數,會等待全部激活的的子進程執行完成,在後臺執行的子進程也是激活狀態。
這裏會等待 command1command2 都執行完成。

這裏的 command1command2 只是舉例用的名稱,實際測試時要換成能夠執行的命令。

相關文章
相關標籤/搜索