普通多線程(準確的講應該是多進程),這種模式 併發大的時候會報錯,影響運行速度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..."