shell中wait命令詳解

2022-06-17 18:42:18 字數 1660 閱讀 5664

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...