wait命令介紹
wait [作業指示或程序號]
1.等待作業號或者程序號制定的程序退出,返回最後乙個作業或程序的退出狀態狀態。如果沒有制定引數,則等待所有子程序的退出,其退出狀態為0.
2.如果是shell中等待使用wait,則不會等待呼叫函式中子任務。在函式中使用wait,則只等待函式中啟動的後台子任務。
3.在shell中使用wait命令,相當於高階語言裡的多執行緒同步。
語法
wait(引數) 使用 wait 是在等待上一批或上乙個指令碼執行完(即上乙個的程序終止),再執行wait之後的命令。
引數
程序或作業標示:指定程序號或者作業號。
例項
1.使用wait等待所有子任務結束。
[plain] view plain copy#!/bin/bash
sleep 10 &
sleep 5&
wait #等待10秒後,退出
[plain] view plain copy#!/bin/bash
sleep 10 &
sleep 5&
wait $! #$!表示上個子程序的程序號,wait等待乙個子程序,等待5秒後,退出
2.在函式中使用wait
[plain] view plain copy#!/bin/bash
source ~/.bashrc
fun() &
done
wait
#開啟5個子程序並行,執行只需要3秒。
例3:用管道fifo檔案來處理併發,本例**
本例讓博主學到很多,用到管道,read -u,exec的相關知識,後續部落格陸續更新。
#!/bin/bash#author : [email protected]
#date : 2013.05.24
#sub process do something
function a_sub_process
#建立乙個fifo檔案
fifo_file=/tmp/$.fifo
mkfifo $fifo_file
#關聯fifo檔案和fd6
exec 6<>$fifo_file # 將fd6指向fifo型別
rm $fifo_file
#最大程序數
process_num=4
#向fd6中輸入$process_num個回車
for ((idx=0;idx
do echo
done >&6
#處理業務,可以使用while
for ((idx=0;idx<20;idx++));
do read -u6 #read -u6命令執行一次,相當於嘗試從fd6中獲取一行,如果獲取不到,則阻塞
#獲取到了一行後,fd6就少了一行了,開始處理子程序,子程序放在後台執行
|| #完成後再補充乙個回車到fd6中,釋放乙個鎖
echo >&6 # 當程序結束以後,再向fd6中加上乙個回車符,即補上了read -u6減去的那個
} &done
#關閉fd6
exec 6>&-
shell中grep命令詳解
用 grep 搜尋文字檔案 如果您要在幾個文字檔案中查詢一字串,可以使用 grep 命令。grep 在文字中搜尋指定的字串。舉個例子 假設您正在 usr src linux documentation 目錄下搜尋帶字串 magic 的檔案 grep magic usr src linux docum...
shell 中if命令詳解(備查)
if 表示式 if test 表示式 引數目錄 b 當file存在並且是塊檔案時返回真 c 當file存在並且是字元檔案時返回真 d 當pathname存在並且是乙個目錄時返回真 e 當pathname指定的檔案或目錄存在時返回真 f 當file存在並且是正規檔案時返回真 g 當由pathname指...
shell 多執行緒程式設計和wait命令
shell裡面也是可以進行多執行緒程式設計的,而且十分方便,同時,wait命令可以進行shell的多執行緒同步控制。1 啟動後台子任務 在執行命令後加 操作符,表示將命令放在子shell中非同步執行。可以達到多執行緒效果。如下 sleep 10 等待10秒,再繼續下一操作 sleep 10 當前sh...