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"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章