日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

shell?wait等待命令的具體使用_linux shell

作者:ghostwritten ? 更新時間: 2023-03-01 編程語言

1. 簡介

bash wait 命令是一個 Shell 命令,它等待后臺運(yùn)行的進(jìn)程完成并返回退出狀態(tài)。與等待指定時間的sleep 命令不同,該wait命令等待所有或特定后臺任務(wù)完成。

2. 語法

在 bash 腳本中使用wait命令有不同的方法。下表解釋了每個用例。

命令 解釋
wait 如果沒有任何參數(shù),該wait命令會等待所有后臺進(jìn)程完成,然后再繼續(xù)執(zhí)行腳本。
wait 添加的 PID 或作業(yè) ID 會等待特定進(jìn)程結(jié)束,然后再繼續(xù)執(zhí)行腳本。
wait -n 僅等待以下后臺進(jìn)程完成并返回退出狀態(tài)。
wait -f 終止程序首先等待后臺任務(wù)完成后再退出。

3. 示例

3.1 等待命令

在 bash 腳本中使用wait時需要了解三個附加參數(shù):

1.&命令后的和號 ( ) 表示后臺作業(yè)。

2.$!獲取最后一個后臺進(jìn)程的PID。使用多個后臺進(jìn)程時,將先前的 PID 存儲在一個變量中。

3.$?打印上一個進(jìn)程的退出狀態(tài)。

要查看這三個參數(shù)如何協(xié)同工作,請打開終端窗口并運(yùn)行:

sleep 10 &
echo $!
echo $?

在這里插入圖片描述

$!參數(shù)存儲后臺進(jìn)程PID,同時$?存儲退出狀態(tài)。退出狀態(tài)0表示命令成功完成。

3.2 單進(jìn)程等待

首先打開終端并創(chuàng)建一個簡單的后臺進(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í)行的時間點(diǎn)。

例如,在文本編輯器中添加以下代碼:

#!/bin/bash
echo Background process &
echo First message
echo Second message
wait
echo Third message

如果后臺進(jìn)程沒有完成第一個和第二個進(jìn)程,則該wait命令調(diào)用暫停以等待第二個進(jìn)程之后后臺進(jìn)程完成,然后再繼續(xù)執(zhí)行第三個進(jìn)程。

將腳本另存為single_process.sh。在終端中,更改權(quán)限以使腳本可執(zhí)行:

sudo chmod +x single_process.sh

運(yùn)行腳本:

./single_process.sh

在這里插入圖片描述

后臺進(jìn)程在命令之前的任何時間完成wait,并且腳本繼續(xù)。

3.4 多個進(jìn)程等待

1.打開文本編輯器,添加以下多進(jìn)程腳本:

#!/bin/bash
sleep 10 &
sleep 15 &
sleep 5 &
echo $(date +%T)
wait 
echo $(date +%T)

wait該腳本在命令之前和之后打印當(dāng)前時間。沒有任何參數(shù),程序會等待所有進(jìn)程完成。

將腳本另存為test.sh并關(guān)閉文件。接下來,使腳本可執(zhí)行:

sudo chmod +x test.sh

最后,運(yùn)行程序:

./test.sh

在這里插入圖片描述

由于進(jìn)程在后臺運(yùn)行,所有三個進(jìn)程都在十五秒內(nèi)完成。

使用相同的腳本測試以下用例:

  • -n參數(shù)添加到<strong>wait</strong>. 只有最快的過程完成,腳本在十秒后結(jié)束。
  • 添加作業(yè) ID 以指示腳本應(yīng)等待哪個作業(yè)。例如,wait %1暫停以等待進(jìn)程 1 ( sleep 10) 完成。

3.5 多個進(jìn)程 bash 等待 PID

與多個進(jìn)程一起工作時,使用 PID 來標(biāo)識一個進(jìn)程。下面的示例腳本顯示了一個用例:

#!/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

在這里插入圖片描述

該腳本需要兩秒鐘來完成第一個過程(由于sleep2)和三秒鐘來完成第二個過程。這兩個過程同時執(zhí)行,都在三秒內(nèi)完成。

參考:

Bash wait Command with Examples

原文鏈接:https://blog.csdn.net/xixihahalelehehe/article/details/127348688

欄目分類
最近更新