您好,登錄后才能下訂單哦!
Linux bash wait命令具體使用方法是什么,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
命令可以使當(dāng)前shell進程掛起,等待所指定的由當(dāng)前shell產(chǎn)生的子進程退出后,wait命令才返回。wait命令的參數(shù)可以是進程ID或是job。
Bash wait命令
wait內(nèi)置的一般語法采用以下形式:
wait [options] ID
Copy
ID是進程或任務(wù)ID。 如果沒有指定ID,則命令等待所有后臺任務(wù)直到完成。
wait命令返回wait的最后一個命令的退出狀態(tài)。
例如,要wait PID 7654的后臺進程,您將使用:
wait 7654
Copy
當(dāng)給出多個進程時,命令等待所有進程完成。
使用jobspec指定作業(yè),這是一種引用構(gòu)成作業(yè)的進程的方法。 Jobspec以百分比符號開始,后跟作業(yè)編號(%n)。 這是一個
的ded例子:rsync -a /home /tmp/home &
Copy
shell作業(yè)ID(括號括起來)和進程ID將顯示在終端上:
[2] 54377
Copy
等待作業(yè),運行wait命令后跟Jobspec:
wait %2
Copy
在使用-n選項中調(diào)用時,命令僅在指定的PID或Jobspecs中僅等待單個作業(yè)完成并返回其退出狀態(tài)。 如果沒有提供參數(shù),wait -n等待任何后臺作業(yè)完成并返回作業(yè)退出狀態(tài)。
wait -n 45432 54346 76573
Copy
在上面的示例中,wait -n僅打印首先退出的作業(yè)的返回狀態(tài); 它沒有顯示進程的PID。 如果要獲取返回退出狀態(tài)的進程PID或Jobspec,請使用-p選項將其分配給變量:
wait -p job_id -n 45432 54346 76573
Copy
-p選項在BASH 5.1中引入。 如果使用較舊的BASH版本,您將獲得“invalid option”錯誤。
-f選項告訴wait等待每個PID或JOBSPEC在返回其退出代碼之前終止,而不是在更改作業(yè)狀態(tài)時返回。 啟用作業(yè)控件時,此選項僅有效。 默認情況下,僅為交互式提示啟用作業(yè)控件。
wait通常用于shell腳本生成并行執(zhí)行的子進程。
為了說明命令如何工作,創(chuàng)建以下腳本:
#!/bin/bash sleep 30 & process_id=$! echo "PID: $process_id" wait $process_id echo "Exit status: $?"
Copy
讓我們按行解釋代碼行:
第一行稱為shebang,它告訴操作系統(tǒng)使用哪個解釋器來解析文件的其余部分。
使用sleep命令來模擬一個耗時的后臺進程。
$!是Bash內(nèi)部變量,用于在后臺存儲上一次運行的進程的PID。 在此示例中,這是sleep命令的PID。 我們將PID存儲在變量(process_id)中。
打印PID號。
PID傳遞給wait命令,該命令等待直到睡眠命令完成。
打印wait命令的退出狀態(tài)。 $?是內(nèi)部Bash變量,用于保存最后執(zhí)行的命令的退出狀態(tài)。
如果您運行腳本,它將打印這樣的內(nèi)容:
PID: 36353 Exit status: 0
Copy
這里使用-n選項的示例:
#!/bin/bash sleep 3 & sleep 30 & sleep 5 & wait -n echo "First job completed." wait echo "All jobs completed."
Copy
執(zhí)行腳本時,它會產(chǎn)生3個后臺進程。 wait -n等待直到完成第一個作業(yè)并打印echo語句。 wait等待所有后臺任務(wù)完成。
first job completed all jobs completed
Copy
最后一個示例說明-f選項。 打開終端并運行:
sleep 3600 &
Copy
[1] 46671
Copy
等待這個進程:
wait 46671
Copy
打開另一個終端并使用
命令停止進程:kill -STOP 46671
Copy
一旦改變了進程狀態(tài),wait命令將完成并返回進程退出代碼。
現(xiàn)在,重復(fù)相同的步驟,但這一次使用wait -f $pid:
sleep 3600 & wait -f 46671
Copy
停止另一個終端的進程:
kill -STOP 46671
Copy
這次wait命令將無法完成。 它將在sleep進程終止之前運行。
看完上述內(nèi)容,你們掌握Linux bash wait命令具體使用方法是什么的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。