標籤:shell指令碼並發
主要記錄一下Shell指令碼中的命令的並發和串列執行。
預設的情況下,Shell指令碼中的命令是串列執行的,必須等到前一條命令執行完後才執行接下來的命令,但是如果我有一大批的的命令需要執行,而且互相又沒有影響的情況下(有影響的話就比較複雜了),那麼就要使用命令的並發執行了。
看下面的代碼:
#!/bin/bash
for(( i = 0; i < ${count}; i++ ))
do
commands1
done
commands2
對於上面的代碼,因為每個commands1都挺耗時的,所以打算使用並發編程,這樣就可以節省大量時間了。
修改後的代碼如下:
#!/bin/bash
for(( i = 0; i < ${count}; i++ ))
do
{
commands1
}&
done
commands2
這樣的話commands1就可以並存執行了。 實質是將commands1作為後台進程在執行,這樣主進程就不用等待前面的命令執行完畢之後才開始執行接下來的命令。
但是我的本來目的是讓commands1的這個迴圈都執行結束後,再用command2去處理前面的結果。如果像上面這樣寫的話,在commands1都還沒結束時就已經開始執行commands2了,得到了錯誤的結果。
再次修改代碼如下:
#!/bin/bash
for(( i = 0; i < ${count}; i++ ))
do
{
commands1
}&
done
wait
commands2
上面這樣就可以達到預期的目的了,先是所有的commands1在後台並存執行,等到迴圈裡面的命令都結束之後才執行接下來的commands2。
對於上面的代碼,如果count值特別大的時候,我們應該控制並發進程的個數,不然會影響系統其他進程的運行,甚至死機。
本文出自 “Linux Oracle MariaDB” 部落格,請務必保留此出處http://wangergui.blog.51cto.com/8504247/1926470
Shell指令碼中的並發