shell指令碼的併發

2021-08-20 17:38:58 字數 986 閱讀 1025

2023年05月09日 17:06:28

閱讀數:1680

default模式下,shell命令是阻塞執行的,可以通過其後新增&讓這條命令非同步執行,如:

sleep

10 &

執行這條命令後,並不會阻塞10秒,而是立即返回。

如果將這種方法用在while迴圈中,則可以實現多程序並行處理。例如一下test1.sh檔案為:

#!/bin/bash

while

read line

do &

done

command 2

這樣的話command 1就可以並行執行了,其實質是將每條command 1命令作為後台程序在執行,這樣主程序就不用等待前面的命令執行完畢之後才開始執行接下來的命令。通過執行ls -l | test1.sh可以看到併發的程序數量。

但是這樣帶來乙個問題: 如果在while迴圈外面的command 2需要用到迴圈內部執行得到的結果,那麼像test1.sh的這種寫法就不work了。我們可以對其做簡單修改,達到上述目的,如test2.sh:

#!/bin/bash

while

read line

do &

done

wait

command 2

上面的**是將所有的command 1在後台並行執行,等到迴圈裡面的命令都結束之後才執行接下來的command 2。

shell指令碼的併發控制 

有時為了避免併發程序數過多,導致機器卡死,需要限制併發的數量。以下**實現了該功能:

#!/bin/bash

while

read line

do >= 20 ))

dodone

sleep 10 &

}done

以上方法通過控制後台任務數來控制併發程序數目在20個以內。

Shell指令碼中的併發

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

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...