普通多線程(准確的講應該是多進程),這種模式 並發大的時候會報錯,影響運行速度
不可控制線程的數量
#!/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..."