Linux shell ping命令多并发

#!/bin/bash
#多线程批量ping,有时候多线程使用&过多,会导致系统崩溃
#用此方法可以进行多并发

#创建5个进程
thread=5
#创建管道文件
tem_fifofile=/tmp/$$.fifo
mkfifo $tmp_fifofile
exec 8<> $tmp_fifofile
rm $tmp_fifofile
#删除文件描述符8,并不会正在的删除此文件,此文件还存在
for i in 'seq $thread'
do
    echo >&8
    #创建一个管道文件,向里面传入了空值,其实随便什么都行。
done
for i in {1....254}
do 
    read -u 8
    #read -u 这个参数是读取文件描述符 8,如果文件描述符中没有东西,那就一直会等待。
    {
    ip=192.168.1.$i
    ping -c1 -W $ip &>/dev/null
    if [ $? -eq 0 ];then
        echo "$ip is up"
    else
        echo "$ip is down"
    fi

    echo >&8
    #执行完后,文件描述符没东西了,那就要再添加进去,不然没得读了,也没得取了。
    }&
    #整体来说就是一次就5个5个来进行多并发,就怕多了导致系统有问题
done
wait
#用户暂停当前进程并释放该进程持有的所有资源。
echo "ping 完了~~~"
人生苦短,我用Python
原文地址:https://www.cnblogs.com/sunjinchao/p/14413581.html