Shell指令碼類比多線程功能分享_linux shell

來源:互聯網
上載者:User

複製代碼 代碼如下:

#!/bin/bash
function pinghost {
ping $1 -c 1 -w 10 |grep rtt|cut -d “/” -f6
}
tmp_fifofile=”/tmp/$.fifo”   # 指令碼啟動並執行當前進程ID號作為檔案名稱
mkfifo $tmp_fifofile         # 建立一個隨機fifo管道檔案
exec 6<>$tmp_fifofile         # 定義檔案描述符6指向這個fifo管道檔案
rm $tmp_fifofile
thread=10
for ((i=0;i<$thread;i++));do   # for迴圈 往 fifo管道檔案中寫入10個空行
echo
done >&6
while read domain
do
read -u6                  # 從檔案描述符6中讀取行(實際指向fifo管道)
{
pinghost ${domain};      # 執行pinghost函數
echo >&6                      # 再次往fifo管道檔案中寫入一個空行。
}&                                  # 放到後台執行
done</home/miotour/ip.txt
wait                          #因為之前的進程都是後台執行,因此要有wait來等待所有的進程都執行完畢後才算整個指令碼跑完。
exec 6>&-                #刪除檔案描述符6
exit 0

說明:{} 這部分語句被放入後台作為一個子進程執行,這部分幾乎是同時完成的,當fifo中10個空行讀完後 while迴圈
繼續等待 read 中讀取fifo資料,當背景10個子進程後,按次序排隊往fifo輸入空行,這樣fifo中又有了資料,for語句繼續執行。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.