shell-異步執行


一、啟動后台子任務

        在執行命令后加&操作符,表示將命令放在子shell中異步執行。可以達到多線程效果。如下,

 

  1. sleep 10 #等待10秒,再繼續下一操作  
  2. sleep 10 & #當前shell不等待,后台子shell等待  

 

二、wait命令介紹

        wait  [作業指示或進程號]

        1.等待作業號或者進程號制定的進程退出,返回最后一個作業或進程的退出狀態狀態。如果沒有制定參數,則等待所有子進程的退出,其退出狀態為0.

        2.如果是shell中等待使用wait,則不會等待調用函數中子任務。在函數中使用wait,則只等待函數中啟動的后台子任務。

        3.在shell中使用wait命令,相當於高級語言里的多線程同步。

 

三、例子

1.使用wait等待所有子任務結束。


 
  1. #!/bin/bash  
  2. sleep 10 &  
  3. sleep 5&  
  4. wait #等待10秒后,退出  

 

  1. #!/bin/bash  
  2. sleep 10 &  
  3. sleep 5&  
  4. wait $! #$!表示上個子進程的進程號,wait等待一個子進程,等待5秒后,退出  

 

 

2.在函數中使用wait


 
  1. #!/bin/bash  
  2. source ~/.bashrc  
  3.   
  4. fun(){  
  5.     echo "fun is begin.timeNum:$timeNum"  
  6.     local timeNum=$1  
  7.     sleep $timeNum &  
  8.     wait #這個只等待wait前面sleep  
  9.       
  10.     echo "fun is end.timeNum:$timeNum"  
  11. }  
  12.   
  13. fun 10 &  
  14. fun 20 &  
  15.   
  16. wait #如果fun里面沒有wait,則整個腳本立刻退出,不會等待fun里面的sleep  
  17. echo "all is ending"  

 

輸出結果為:

 


 
  1. fun is begin.timeNum:10  
  2. fun is begin.timeNum:20  
  3. fun is end.timeNum:10  
  4. fun is end.timeNum:20  
  5. all is ending  


從輸出結果,可以看到,整個腳本,等待了所有子任務的退出


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM