很多时候针对许多台主机的在线检测,我们经常会用for循环去ping,但是非常慢,因为是一台一台主机的去ping。如果是同时启动N个进程去ping所有主机,那是不是很快了呢?对,shell多线程处理。

    找个实例脚本:

 
  
  1. #!/bin/bash 
  2. # By http://cto.luxiaok.com 
  3. for i in $(seq 1 254) 
  4.     do 
  5.     { 
  6.     IP="172.16.8.$i" 
  7.     ping $IP -c1 -s1 2>&1 1>/dev/null && echo -e $IP is "\033[32;49;1malive\033[39;49;0m" || echo -e $IP is "\033[31;49;1mdown\033[39;49;0m" 
  8.     } & 
  9.     done 
  10. wait 

    在RedHat Enterprise Linux 6.4 32bit平台测试效果展示:

    这里也特意使用了echo的特效输出,比较美观一点。254个IP扫描很快,大概3秒左右。如果是大量的主机,那真的可以很高效的节约很多时间。这里的代码只是基于原理的最简单的测试应用,如果在实际生产环境中,就仁者见仁智者见智了。