shell wait等待命令的具體使用
1. 簡介
bash wait 命令是一個(gè) Shell 命令,它等待后臺運(yùn)行的進(jìn)程完成并返回退出狀態(tài)。與等待指定時(shí)間的sleep 命令不同,該wait命令等待所有或特定后臺任務(wù)完成。
2. 語法
在 bash 腳本中使用wait命令有不同的方法。下表解釋了每個(gè)用例。
命令 | 解釋 |
---|---|
wait | 如果沒有任何參數(shù),該wait命令會(huì)等待所有后臺進(jìn)程完成,然后再繼續(xù)執(zhí)行腳本。 |
wait | 添加的 PID 或作業(yè) ID 會(huì)等待特定進(jìn)程結(jié)束,然后再繼續(xù)執(zhí)行腳本。 |
wait -n | 僅等待以下后臺進(jìn)程完成并返回退出狀態(tài)。 |
wait -f | 終止程序首先等待后臺任務(wù)完成后再退出。 |
3. 示例
3.1 等待命令
在 bash 腳本中使用wait時(shí)需要了解三個(gè)附加參數(shù):
1.&
命令后的和號 ( )
表示后臺作業(yè)。
2.$!
獲取最后一個(gè)后臺進(jìn)程的PID。使用多個(gè)后臺進(jìn)程時(shí),將先前的 PID 存儲在一個(gè)變量中。
3.$?
打印上一個(gè)進(jìn)程的退出狀態(tài)。
要查看這三個(gè)參數(shù)如何協(xié)同工作,請打開終端窗口并運(yùn)行:
sleep 10 & echo $! echo $?
該$!
參數(shù)存儲后臺進(jìn)程PID,同時(shí)$?
存儲退出狀態(tài)。退出狀態(tài)0表示命令成功完成。
3.2 單進(jìn)程等待
首先打開終端并創(chuàng)建一個(gè)簡單的后臺進(jìn)程:
sleep 10 &
確認(rèn)作業(yè)在后臺運(yùn)行:
jobs -l
使用wait不帶任何參數(shù)的命令暫停直到進(jìn)程完成:
wait
10 秒后(由于sleep 10),控制臺打印完成消息。
3.3 單進(jìn)程 bash 等待
使用該wait命令指示后臺進(jìn)程必須在腳本內(nèi)執(zhí)行的時(shí)間點(diǎn)。
例如,在文本編輯器中添加以下代碼:
#!/bin/bash echo Background process & echo First message echo Second message wait echo Third message
如果后臺進(jìn)程沒有完成第一個(gè)和第二個(gè)進(jìn)程,則該wait命令調(diào)用暫停以等待第二個(gè)進(jìn)程之后后臺進(jìn)程完成,然后再繼續(xù)執(zhí)行第三個(gè)進(jìn)程。
將腳本另存為single_process.sh
。在終端中,更改權(quán)限以使腳本可執(zhí)行:
sudo chmod +x single_process.sh
運(yùn)行腳本:
./single_process.sh
后臺進(jìn)程在命令之前的任何時(shí)間完成wait
,并且腳本繼續(xù)。
3.4 多個(gè)進(jìn)程等待
1.打開文本編輯器,添加以下多進(jìn)程腳本:
#!/bin/bash sleep 10 & sleep 15 & sleep 5 & echo $(date +%T) wait echo $(date +%T)
wait該腳本在命令之前和之后打印當(dāng)前時(shí)間。沒有任何參數(shù),程序會(huì)等待所有進(jìn)程完成。
將腳本另存為test.sh并關(guān)閉文件。接下來,使腳本可執(zhí)行:
sudo chmod +x test.sh
最后,運(yùn)行程序:
./test.sh
由于進(jìn)程在后臺運(yùn)行,所有三個(gè)進(jìn)程都在十五秒內(nèi)完成。
使用相同的腳本測試以下用例:
- 將
-n
參數(shù)添加到<strong>wait</strong>
. 只有最快的過程完成,腳本在十秒后結(jié)束。 - 添加作業(yè) ID 以指示腳本應(yīng)等待哪個(gè)作業(yè)。例如,
wait %1
暫停以等待進(jìn)程 1 ( sleep 10) 完成。
3.5 多個(gè)進(jìn)程 bash 等待 PID
與多個(gè)進(jìn)程一起工作時(shí),使用 PID
來標(biāo)識一個(gè)進(jìn)程。下面的示例腳本顯示了一個(gè)用例:
#!/bin/bash echo "Process 1 lasts for 2s" && sleep 2 & PID=$! echo "Process 2 lasts for 3s" && sleep 3 & echo "Current time $(date +%T)" wait $PID echo "Process 1 ended at time $(date +%T) with exit status $?" wait $! echo "Process 2 ended at time $(date +%T) with exit status $?"
將腳本另存為multi_wait.sh。使腳本可執(zhí)行:
sudo chmod +x multi_wait.sh
運(yùn)行腳本查看輸出:
./multi_wait.sh
該腳本需要兩秒鐘來完成第一個(gè)過程(由于sleep2)和三秒鐘來完成第二個(gè)過程。這兩個(gè)過程同時(shí)執(zhí)行,都在三秒內(nèi)完成。
參考:
Bash wait Command with Examples
到此這篇關(guān)于shell wait等待命令的具體使用的文章就介紹到這了,更多相關(guān)shell wait內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Shell?腳本自動(dòng)輸入密碼的三種方式小結(jié)
本文主要介紹了Shell?腳本自動(dòng)輸入密碼的三種方式小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07Linux 怎么實(shí)現(xiàn)添加FTP用戶并設(shè)置權(quán)限的方法
這篇文章主要介紹了Linux 怎么實(shí)現(xiàn)添加FTP用戶并設(shè)置權(quán)限的方法的相關(guān)資料,這里對添加FTP用戶進(jìn)行了步驟詳解,需要的朋友可以參考下2017-01-01shell腳本實(shí)現(xiàn)拷貝大文件顯示百分比的代碼分享
這篇文章主要介紹了shell腳本實(shí)現(xiàn)拷貝大文件顯示百分比的代碼分享,需要的朋友可以參考下2014-08-08awk腳本統(tǒng)計(jì)一組單詞中字母出現(xiàn)最多最少頻率
這篇文章主要介紹編寫一個(gè) awk 腳本來找到一組單詞中出現(xiàn)次數(shù)最多(和最少)的單詞頻率,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03shell批量curl接口腳本的簡單實(shí)現(xiàn)方法
這篇文章主要跟大家介紹了關(guān)于shell批量curl接口腳本的簡單實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用shell具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08