Shell腳本模擬多線程功能分享
#!/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號(hào)作為文件名
mkfifo $tmp_fifofile # 新建一個(gè)隨機(jī)fifo管道文件
exec 6<>$tmp_fifofile # 定義文件描述符6指向這個(gè)fifo管道文件
rm $tmp_fifofile
thread=10
for ((i=0;i<$thread;i++));do # for循環(huán) 往 fifo管道文件中寫(xiě)入10個(gè)空行
echo
done >&6
while read domain
do
read -u6 # 從文件描述符6中讀取行(實(shí)際指向fifo管道)
{
pinghost ${domain}; # 執(zhí)行pinghost函數(shù)
echo >&6 # 再次往fifo管道文件中寫(xiě)入一個(gè)空行。
}& # 放到后臺(tái)執(zhí)行
done</home/miotour/ip.txt
wait #因?yàn)橹暗倪M(jìn)程都是后臺(tái)執(zhí)行,因此要有wait來(lái)等待所有的進(jìn)程都執(zhí)行完畢后才算整個(gè)腳本跑完。
exec 6>&- #刪除文件描述符6
exit 0
說(shuō)明:{} 這部分語(yǔ)句被放入后臺(tái)作為一個(gè)子進(jìn)程執(zhí)行,這部分幾乎是同時(shí)完成的,當(dāng)fifo中10個(gè)空行讀完后 while循環(huán)
繼續(xù)等待 read 中讀取fifo數(shù)據(jù),當(dāng)后臺(tái)的10個(gè)子進(jìn)程后,按次序排隊(duì)往fifo輸入空行,這樣fifo中又有了數(shù)據(jù),for語(yǔ)句繼續(xù)執(zhí)行。
相關(guān)文章
Shell動(dòng)態(tài)生成數(shù)組的多種方法
這篇文章主要介紹了Shell動(dòng)態(tài)生成數(shù)組的多種方法,本文給出while循環(huán)法和for循環(huán)法,以及使用seq生成數(shù)組法,需要的朋友可以參考下2015-07-07Linux系統(tǒng)上實(shí)現(xiàn)定時(shí)重啟Tomcat服務(wù)腳本介紹
大家好,本篇文章介紹的是Linux系統(tǒng)上實(shí)現(xiàn)定時(shí)重啟Tomcat服務(wù)腳本介紹,感興趣的同學(xué)趕緊來(lái)看看,希望可以對(duì)你起到幫助2021-11-11Bash Shell中忽略大小寫(xiě)的設(shè)置方法
這篇文章主要介紹了Bash Shell中忽略大小寫(xiě)的設(shè)置方法,本文還講解了其它的一些方便輸入命令的設(shè)置,如關(guān)閉顯示隱藏文件、只按一次TAB鍵、搜索歷史命令等技巧,需要的朋友可以參考下2015-04-04Linux/Nginx如何查看搜索引擎蜘蛛爬蟲(chóng)的行為
本文給大家介紹Linux/Nginx如何查看搜索引擎蜘蛛爬蟲(chóng)的行為,清楚蜘蛛的爬行情況對(duì)做SEO優(yōu)化有很大的幫助。需要的朋友通過(guò)本篇文章學(xué)習(xí)下吧2015-10-10使用scp獲取遠(yuǎn)程linux服務(wù)器上的文件 linux遠(yuǎn)程拷貝文件
scp是secure copy的簡(jiǎn)寫(xiě),用于在Linux下進(jìn)行遠(yuǎn)程拷貝文件的命令,scp傳輸是加密的,下面看一下詳細(xì)使用方法吧2014-01-01對(duì)shell中常見(jiàn)參數(shù)及判斷命令介紹
今天小編就為大家分享一篇對(duì)shell中常見(jiàn)參數(shù)及判斷命令介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07