Linux小課堂之Wait命令

wait是一個shell命令,它等待給定進程完成,然後返回其退出狀態。 Wait命令用於等待特定的進程ID和作業ID並返回其終止狀態。

在執行大型自動化流程時,我們需要使幾個模組等待到上一組模組完成並返回數據管道進入下一個模組的數據,在這種情況下,我們可以使用Wait命令直到完成上一個模組。

Wait命令如何工作?

Wait命令用於監視先前的進程,取決於先前的進程的返回狀態,它將返回退出狀態。例如,如果我們要等待完成特定的進程ID 13245,則當進程13245 完成 wait命令返回13245退出狀態的返回值時,應使用「 wait 13245」。

-wait PID(PID-實用程式要等待終止的命令的進程ID)。-wait JID(JID-作業ID,標識要等待的後台進程,僅適用於當前Shell執行環境中的wait調用)。

Wait 命令的退出狀態值取決於最後指定的PID / JID。當任何進程異常終止時,退出狀態將大於128。

當它沒有子進程調用並且當前shell知道的所有進程ID都已終止時,Wait命令以0值退出。如果wait命令檢測到任何錯誤,那麼它將返回1到126之間的任何值。如果最後一個進程ID是未知的,則wait命令將以值127退出。

Wait命令示例

讓我們檢查一些腳本以了解wait命令的工作方式。

示例1 –帶有Wait命令的腳本

我們有兩個腳本,分別稱為「 foo.sh」和「 bar.sh」腳本。 'Foo.sh'腳本的輸出數字介於1到5之間,而'bar.sh'腳本將調用foo.sh並在後台運行它,獲取foo.sh的PID並等待其完成,一旦完成,它將啟動「 bar.sh」完成循環。

Script – foo.sh

Script – bar.sh

Result

示例2 –沒有wait命令的腳本

我們有兩個腳本,分別稱為「 foo.sh」和「 bar.sh」腳本。 'foo.sh'腳本輸出的數字介於1到5之間,而bar.sh腳本將調用foo.sh並在後台運行它,但它不會等待foo.sh完成並執行這兩個腳本。

Script – foo.sh

Script – bar.sh

Result

示例3 –具有wait命令和返回狀態的腳本

「 bar.sh」腳本將調用foo.sh並在後台運行它,獲取foo.sh的PID並等待其完成,一旦完成,它將啟動bar.sh循環,最後,返回 foo.sh腳本的退出程式碼。

Script – foo.sh (Exit status = 0)

Script – foo.sh

Script – bar.sh

Result

Script – foo.sh (Exit status = NON Zero)

Script – foo.sh

Script – bar.sh

Result

結論

Wait和Sleep都是作業系統中基於時間的系統調用。 我們來看一下wait和sleep命令之間的區別。