shell 多線程

普通多線程(準確的講應該是多進程),這種模式 併發大的時候會報錯,影響運行速度bash

不可控制線程的數量多線程

#!/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..."
相關文章
相關標籤/搜索