普通多线程(准确的讲应该是多进程),这种模式 并发大的时候会报错,影响运行速度
不可控制线程的数量
#!/bin/bashfor i in {1..254}do
#后台运行,每次都创建新的线程(进程)
{ip=192.168.179.$iping -c1 -W1 $ip &> /dev/nullif [ $? -eq 0 ];thenecho "$ip is up!!"elseecho "$ip is down"fi}&donewaitecho "all funish..."
文件描述符多线程(准确的讲是多进程),可以控制线程的数量
#!/bin/bash #线程数 thread=5
#零时文件 tmp_fifofile=/tmp/$$.fifo #创建管道文件 mkfifo $tmp_fifofile
#打开管道文件设置描述符为8,也可以是其他 exec 8<> $tmp_fifofile
#删除文件,文件删除,文件描述符还是存在的,主要用到了文件描述符(文件没有用就删除了) rm $tmp_fifofilefor i in `seq $thread`do
#文件描述符写入空格占位(写入其他内容也可以,只要写入就能占位 echo >&8
donefor i in {1..254}do #读取文件描述符read -u 8{ip=192.168.179.$iping -c1 -W1 $ip &> /dev/nullif [ $? -eq 0 ];thenecho "$ip is up!!"elseecho "$ip is down"fi #读取完,再写入占位,放入管道echo >&8}&done #等待线程 wait
#释放文件描述符
exec 8>&-echo "all funish..."