[linux] 線程和wait命令,sleep命令


在linux腳本編程中使用多線程編程,其中wait命令可以實現shell的多線程同步控制。

1. 啟動后台子任務

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

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

2. wait命令

  wait是用來阻塞當前進程的執行,直至指定的子進程執行結束后,才繼續執行。使用wait可以在bash腳本“多進程”執行模式下,起到一些特殊控制的作用。

  wait  [作業指示或進程號]

  eg:wait 23   or  wait %1

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

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

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

 example:

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

#!/bin/sh  
echo “1”  
sleep 5&  
echo “3”  
echo “4”  
wait  #會等待wait所在bash上的所有子進程的執行結束,本例中就是sleep 5這句  
輸出:echo”5

2.在函數中使用wait

#!/bin/bash  
source ~/.bashrc  
  
fun(){  
    echo "fun is begin.timeNum:$timeNum"  
    local timeNum=$1  
    sleep $timeNum &  
    wait #這個只等待wait前面sleep  
      
    echo "fun is end.timeNum:$timeNum"  
}  
  
fun 10 &  
fun 20 &  
  
wait #如果fun里面沒有wait,則整個腳本立刻退出,不會等待fun里面的sleep  
echo "all is ending"  

輸出結果為:

fun is begin.timeNum:10  
fun is begin.timeNum:20  
fun is end.timeNum:10  
fun is end.timeNum:20  
all is ending  

 


免責聲明!

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



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