[ SHELL編程 ] shell多線程操作執行個體

來源:互聯網
上載者:User

標籤:ttl   進程數量   data   shell編程   完成   smi   font   null   code   

1、需求

    尋找192.168.0.*網段中所有未使用過的IP

2、實現

    我們知道尋找未使用IP的方法可以使用ping命令完成。對於單個IP的判斷,使用命令如下

$ ping -c 1 192.168.0.1PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=0.031 ms--- 192.168.0.1 ping statistics ---1 packets transmitted, 1 received, 0% packet loss, time 0msrtt min/avg/max/mdev = 0.031/0.031/0.031/0.000 ms

  如果上述類似訊息,則判斷該IP是連通的即在使用中。如果沒有,則可以判斷未使用。如果只是尋找一個IP,可以多試幾個就知道了,但是這種靠試效率太低,不科學,寫個迴圈批量尋找下。

#!/bin/bashfor i in $(seq 0 255);do    ip="192.168.0.${i}"    ping -c 1 ${ip} &>/dev/null    if [ $? -ne 0 ];then      printf "${ip} can not reachable\n"    fidone

   這裡,實現了批量尋找192.168.0.*網段內未使用過的IP。但是執行命令的時候你發現執行非常慢(這裡不貼出執行結果,大家可以自己執行感受一下)。顯然,這沒有解決效率的問題。這時你肯定想到了如果使用多進程就可以解決這個問題了。是的。我們看下下面的例子。

#!/bin/bashMAX_THREAD_NUM=50for i in $(seq 0 255);do    ip="192.168.0.${i}"    (      ping -c 1 ${ip} &>/dev/null      [ $? -ne 0 ] && printf "${ip} can not reachable\n"      )&    num_ping=`ps -ef | grep "ping" | grep -v grep | wc -l`    while [ "${num_ping}" -gt "${MAX_THREAD_NUM}" ];do      sleep 1      num_ping=`ps -ef | grep "ping" | grep -v grep | wc -l`    donedonewait

    執行發現效率數倍提升。上述的例子是利用&將進程放到後台執行,並且通過迴圈判斷當前ping命令執行的進程數來控制進程數量。這裡MAX_THREAD_NUM設定的為50,考慮ping不太消耗資源可以還可以調整更大。如果是消耗資源多的命令應該將MAX_THREAD_NUM調小。具體根據伺服器效能和命令消耗資源情況調整。

  還有一種利用檔案描述符、read的方法,我們一塊寫下看下,效果是一樣的,例子如下

#!/bin/bashtemp_fifofile="/tmp/$$.fifo"mkfifo ${temp_fifofile}exec 5<>${temp_fifofile}rm ${temp_fifofile}MAX_THREAD_NUM=50for ((i=0;i<${MAX_THREAD_NUM};i++));do  echodone >&5for((i=0;i<=255;i++));do  read -u5  (    ip="10.135.17.${i}"    ping -c 1 ${ip} &>/dev/null    [ $? -ne 0 ] && printf "${ip} can not reachable\n"     echo >&5   )& donewaitexec 5>&-exit 0

      如果是其他需要多進程執行的命令,可以修改一下。根據實際情況選擇這兩種方法之一實現。方法一相對更好理解。

 

[ SHELL編程 ] shell多線程操作執行個體

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.