shell wait 等待指令
文章目錄
- shell wait 等待指令
- 1. 簡介
- 2. 文法
- 3. 示例
- 3.1 等待指令
- 3.2 單程序等待
- 3.3 單程序 bash 等待
- 3.4 多個程序等待
- 3.5 多個程序 bash 等待 PID
1. 簡介
bash wait 指令是一個 Shell 指令,它等待背景運作的程序完成并傳回退出狀态。與等待指定時間的sleep 指令不同,該wait指令等待所有或特定背景任務完成。
2. 文法
在 bash 腳本中使用wait指令有不同的方法。下表解釋了每個用例。
指令 | 解釋 |
wait | 如果沒有任何參數,該wait指令會等待所有背景程序完成,然後再繼續執行腳本。 |
wait | 添加的 PID 或作業 ID 會等待特定程序結束,然後再繼續執行腳本。 |
wait -n | 僅等待以下背景程序完成并傳回退出狀态。 |
wait -f | 終止程式首先等待背景任務完成後再退出。 |
3. 示例
3.1 等待指令
在 bash 腳本中使用wait時需要了解三個附加參數:
- 1.
指令後的和号&
表示背景作業。( )
- 2.
擷取最後一個背景程序的PID。使用多個背景程序時,将先前的 PID 存儲在一個變量中。$!
- 3.
列印上一個程序的退出狀态。$?
要檢視這三個參數如何協同工作,請打開終端視窗并運作:
sleep 10 &
echo $!
echo $?
該
$!
參數存儲背景程序PID,同時
$?
存儲退出狀态。退出狀态0表示指令成功完成。
3.2 單程序等待
- 首先打開終端并建立一個簡單的背景程序:
sleep 10 &
- 确認作業在背景運作:
jobs
- 使用wait不帶任何參數的指令暫停直到程序完成:
wait
10 秒後(由于sleep 10),控制台列印完成消息。
3.3 單程序 bash 等待
使用該wait指令訓示背景程序必須在腳本内執行的時間點。
- 例如,在文本編輯器中添加以下代碼:
#!/bin/bash
echo Background process &
echo First message
echo Second message
wait
echo
如果背景程序沒有完成第一個和第二個程序,則該wait指令調用暫停以等待第二個程序之後背景程序完成,然後再繼續執行第三個程序。
- 将腳本另存為
。在終端中,更改權限以使腳本可執行:single_process.sh
sudo chmod
- 運作腳本:
./single_process.sh
背景程序在指令之前的任何時間完成
wait
,并且腳本繼續。
3.4 多個程序等待
1.打開文本編輯器,添加以下多程序腳本:
#!/bin/bash
sleep 10 &
sleep 15 &
sleep 5 &
echo $(date +%T)
wait
echo $(date +%T)
wait該腳本在指令之前和之後列印目前時間。沒有任何參數,程式會等待所有程序完成。
- 将腳本另存為test.sh并關閉檔案。接下來,使腳本可執行:
sudo chmod
- 最後,運作程式:
./test.sh
由于程序在背景運作,所有三個程序都在十五秒内完成。
- 使用相同的腳本測試以下用例:
- 将
參數添加到-n
. 隻有最快的過程完成,腳本在十秒後結束。<strong>wait</strong>
- 添加作業 ID 以訓示腳本應等待哪個作業。例如,
暫停以等待程序 1 ( sleep 10) 完成。wait %1
3.5 多個程序 bash 等待 PID
- 與多個程序一起工作時,使用
來辨別一個程序。下面的示例腳本顯示了一個用例:PID
#!/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。使腳本可執行:
sudo chmod
- 運作腳本檢視輸出:
./multi_wait.sh
- Bash wait Command with Examples