CentOS7 并发控制测试大量主机连通性

脚本描述:测试同网段2-254之间所有ip是否可达

使用技术:命名管道named pipe,文件描述符FD

 

#!/usr/bin/bash
# ping 多线程并发控制
# by xqk 2020-06-18
# 并发的数量,相当于定义5个管道
thread=10
# 创建管道文件,在/tmp下以当前pid命名$$.fifo,防止命名冲突
tmp_fifofile=/tmp/$$.fifo
mkfifo $tmp_fifofile

# 定义FD文件描述符
exec 8<> $tmp_fifofile
# 删除该文件,并不影响FD文件描述符
rm $tmp_file

# 往管道文件放点内容(什么内容不重要,也可以为空)
for i in `seq $thread`
do
        echo >&8
done
for i in {1..254}
do
        # 到管道文件读FD,能读到才循环,循环读到5(thread)之后,此时5个管道已经用完,
        # 
        read -u 8
        {
        ip=47.95.2.$i
        ping -c1 -W1 $ip &>/dev/null
        if [ $? -eq 0 ];then
                echo "$ip is up"
        else
                echo "$ip is down"
        fi
        # 如果哪个ping进程执行完之后,需要返还一个管道出来,供下一个进程使用
        # 但是始终保持在5个管道中执行
        echo >&8
        }&
done
wait
# 释放FD文件描述符
exec 8>&-
echo "finish...."

 

你可能感兴趣的:(Shell)