shell 多线程

普通多线程(准确的讲应该是多进程),这种模式 并发大的时候会报错,影响运行速度

不可控制线程的数量

#!/bin/bash

for i in {1..254}

do

    #后台运行,每次都创建新的线程(进程)
{ ip=192.168.179.$i ping -c1 -W1 $ip &> /dev/null if [ $? -eq 0 ];then echo "$ip is up!!" else echo "$ip is down" fi }& done wait echo "all funish..."

 

文件描述符多线程(准确的讲是多进程),可以控制线程的数量

#!/bin/bash
#线程数
thread=5
#零时文件 tmp_fifofile=/tmp/$$.fifo #创建管道文件 mkfifo $tmp_fifofile
#打开管道文件设置描述符为8,也可以是其他 exec
8<> $tmp_fifofile
#删除文件,文件删除,文件描述符还是存在的,主要用到了文件描述符(文件没有用就删除了)
rm $tmp_fifofile for i in `seq $thread` do
#文件描述符写入空格占位(写入其他内容也可以,只要写入就能占位       
echo >&8
done

for i in {1..254}

do
#读取文件描述符
        read -u 8
        {

        ip=192.168.179.$i

        ping -c1 -W1 $ip &> /dev/null

        if [ $? -eq 0 ];then

                echo "$ip is up!!"
        else
                echo "$ip is down"

        fi
#读取完,再写入占位,放入管道
        echo >&8

        }&

done
#等待线程
wait

#释放文件描述符
exec 8>&- echo "all funish..."

 

posted @ 2019-09-03 22:23  zhoufly  阅读(1906)  评论(1编辑  收藏  举报