Shell指令碼中的並發

來源:互聯網
上載者:User

標籤:shell指令碼並發

主要記錄一下Shell指令碼中的命令的並發和串列執行。

預設的情況下,Shell指令碼中的命令是串列執行的,必須等到前一條命令執行完後才執行接下來的命令,但是如果我有一大批的的命令需要執行,而且互相又沒有影響的情況下(有影響的話就比較複雜了),那麼就要使用命令的並發執行了。


看下面的代碼:

  1. #!/bin/bash  

  2.   

  3. for(( i = 0; i < ${count}; i++ ))  

  4. do  

  5.         commands1  

  6. done  

  7.   

  8. commands2  


對於上面的代碼,因為每個commands1都挺耗時的,所以打算使用並發編程,這樣就可以節省大量時間了。


修改後的代碼如下:


  1. #!/bin/bash  

  2.   

  3. for(( i = 0; i < ${count}; i++ ))  

  4. do  

  5. {  

  6.         commands1  

  7. }&  

  8. done  

  9.   

  10. commands2  


這樣的話commands1就可以並存執行了。 實質是將commands1作為後台進程在執行,這樣主進程就不用等待前面的命令執行完畢之後才開始執行接下來的命令。

但是我的本來目的是讓commands1的這個迴圈都執行結束後,再用command2去處理前面的結果。如果像上面這樣寫的話,在commands1都還沒結束時就已經開始執行commands2了,得到了錯誤的結果。

再次修改代碼如下:

  1. #!/bin/bash  

  2.   

  3. for(( i = 0; i < ${count}; i++ ))  

  4. do  

  5. {  

  6.         commands1  

  7. }&  

  8. done  

  9. wait  

  10.   

  11. commands2  


上面這樣就可以達到預期的目的了,先是所有的commands1在後台並存執行,等到迴圈裡面的命令都結束之後才執行接下來的commands2。


對於上面的代碼,如果count值特別大的時候,我們應該控制並發進程的個數,不然會影響系統其他進程的運行,甚至死機。



本文出自 “Linux Oracle MariaDB” 部落格,請務必保留此出處http://wangergui.blog.51cto.com/8504247/1926470

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.