Shell腳本模擬多線程功能分享
更新時間:2014年11月28日 15:18:14 投稿:junjie
這篇文章主要介紹了Shell腳本模擬多線程功能分享,本文直接給出實(shí)現(xiàn)代碼,代碼中有詳細(xì)的注釋,需要的朋友可以參考下
復(fù)制代碼 代碼如下:
#!/bin/bash
function pinghost {
ping $1 -c 1 -w 10 |grep rtt|cut -d “/” -f6
}
tmp_fifofile=”/tmp/$.fifo” # 腳本運(yùn)行的當(dāng)前進(jìn)程ID號作為文件名
mkfifo $tmp_fifofile # 新建一個隨機(jī)fifo管道文件
exec 6<>$tmp_fifofile # 定義文件描述符6指向這個fifo管道文件
rm $tmp_fifofile
thread=10
for ((i=0;i<$thread;i++));do # for循環(huán) 往 fifo管道文件中寫入10個空行
echo
done >&6
while read domain
do
read -u6 # 從文件描述符6中讀取行(實(shí)際指向fifo管道)
{
pinghost ${domain}; # 執(zhí)行pinghost函數(shù)
echo >&6 # 再次往fifo管道文件中寫入一個空行。
}& # 放到后臺執(zhí)行
done</home/miotour/ip.txt
wait #因?yàn)橹暗倪M(jìn)程都是后臺執(zhí)行,因此要有wait來等待所有的進(jìn)程都執(zhí)行完畢后才算整個腳本跑完。
exec 6>&- #刪除文件描述符6
exit 0
說明:{} 這部分語句被放入后臺作為一個子進(jìn)程執(zhí)行,這部分幾乎是同時完成的,當(dāng)fifo中10個空行讀完后 while循環(huán)
繼續(xù)等待 read 中讀取fifo數(shù)據(jù),當(dāng)后臺的10個子進(jìn)程后,按次序排隊(duì)往fifo輸入空行,這樣fifo中又有了數(shù)據(jù),for語句繼續(xù)執(zhí)行。
您可能感興趣的文章:
相關(guān)文章
Linux系統(tǒng)上實(shí)現(xiàn)定時重啟Tomcat服務(wù)腳本介紹
大家好,本篇文章介紹的是Linux系統(tǒng)上實(shí)現(xiàn)定時重啟Tomcat服務(wù)腳本介紹,感興趣的同學(xué)趕緊來看看,希望可以對你起到幫助2021-11-11使用scp獲取遠(yuǎn)程linux服務(wù)器上的文件 linux遠(yuǎn)程拷貝文件
scp是secure copy的簡寫,用于在Linux下進(jìn)行遠(yuǎn)程拷貝文件的命令,scp傳輸是加密的,下面看一下詳細(xì)使用方法吧2014-01-01