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..."

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM