#!/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 完了~~~"