您好,登錄后才能下訂單哦!
這篇文章主要講解了“如何編寫Shell腳本模擬多線程功能”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“如何編寫Shell腳本模擬多線程功能”吧!
代碼如下:
#!/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語句繼續執行。
感謝各位的閱讀,以上就是“如何編寫Shell腳本模擬多線程功能”的內容了,經過本文的學習后,相信大家對如何編寫Shell腳本模擬多線程功能這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。