Linux shell "多線程"例子

shell多線程? 其實這裏說的是多進程.

其實就是開多個後臺進程, 然後等它們都結束後, 才認爲結束.
舉一個最常見的例子, ping一個網段內的所有ip, 看其通斷情況. 其他情況都可以套用這個例子來改造:

#! /bin/bash
#
# Distributed under terms of the MIT license.
#

# 這個併發度是爲了同時不會開太多進程, 怕系統資源不夠. 根據實際情況調節.
concurrency=${1:-5}
ipPrefix=${2:-"10.25.3"}

fifoFile="/tmp/$$.fifo"
fd=8

# 創建命名管道
mkfifo $fifoFile
trap "exec 8>&-; rm $fifoFile" EXIT

# 創建文件描述符並和文件關聯
# 測試過程中發現這裏不能用$fd, 就要寫上具體數字 
exec 8<>"$fifoFile"

for i in `seq $concurrency`; do
	echo >& $fd
done


for i in {1..254}; do
	read -u $fd
	{
	ip="$ipPrefix.$i"
	ping -c 1 -W 1 $ip &>/dev/null
	if [ $? -eq 0 ]; then
		echo "$ip is up"
	else
		echo "$ip is down"
	fi
	echo >& $fd
	}&
done

wait

echo "all done"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章