Shell指令碼中的併發

2021-09-20 23:44:22 字數 975 閱讀 6838

主要記錄一下shell指令碼中的命令的併發和序列執行。

預設的情況下,shell指令碼中的命令是序列執行的,必須等到前一條命令執行完後才執行接下來的命令,但是如果我有一大批的的命令需要執行,而且互相又沒有影響的情況下(有影響的話就比較複雜了),那麼就要使用命令的併發執行了。

看下面的**:

#!/bin/bash  

for(( i = 0; i < $; i++ ))  

do  

commands1  

done  

commands2  

對於上面的**,因為每個commands1都挺耗時的,所以打算使用併發程式設計,這樣就可以節省大量時間了。

修改後的**如下:

#!/bin/bash  

for(( i = 0; i < $; i++ ))  

do  

commands1  

done  

commands2  

這樣的話commands1就可以並行執行了。 實質是將commands1作為後台程序在執行,這樣主程序就不用等待前面的命令執行完畢之後才開始執行接下來的命令。

但是我的本來目的是讓commands1的這個迴圈都執行結束後,再用command2去處理前面的結果。如果像上面這樣寫的話,在commands1都還沒結束時就已經開始執行commands2了,得到了錯誤的結果。

再次修改**如下:

#!/bin/bash  

for(( i = 0; i < $; i++ ))  

do  

commands1  

done  

wait  

commands2  

上面這樣就可以達到預期的目的了,先是所有的commands1在後台並行執行,等到迴圈裡面的命令都結束之後才執行接下來的commands2。

對於上面的**,如果count值特別大的時候,我們應該控制併發程序的個數,不然會影響系統其他程序的執行,甚至宕機。

shell指令碼的併發

2016年05月09日 17 06 28 閱讀數 1680 default模式下,shell命令是阻塞執行的,可以通過其後新增 讓這條命令非同步執行,如 sleep 10 執行這條命令後,並不會阻塞10秒,而是立即返回。如果將這種方法用在while迴圈中,則可以實現多程序並行處理。例如一下test1...

Shell指令碼併發及併發數的控制

正常情況下,shell指令碼是序列執行的,一條命令執行完才會執行接下來的命令。如下 bin bash for i in seq 1 10 do echo i done echo end 指令碼執行的結果如下 123 4567 8910 end echo 1命令序列執行,如果命令耗時較長導致總時間較長...

shell指令碼併發控制詳解

file descriptors fd,檔案描述符或檔案控制代碼 程序使用檔案描述符來管理開啟的檔案 檢視當前程序的fd 確定以下三點 如何exec開啟乙個檔案 exec 3 file1.txt 如何exec關閉乙個檔案 釋放檔案控制代碼 如果沒有釋放控制代碼,檔案刪除後描述符依然還在 exec 3...