異步執(zhí)行
有時我們希望同時執(zhí)行多項(xiàng)任務(wù),這其中涉及到父腳本以及多個子腳本的加載問題,子腳本可以在父腳本運(yùn)行時執(zhí)行其他額外的任務(wù)。但是,當(dāng)一系列腳本以這種方式運(yùn)行時,保證父腳本與子腳本的協(xié)調(diào)一致就會是一個問題。試想下這樣一種情況,如果父腳本與子腳本互相依賴,一個腳本必須等待另一個腳本任務(wù)完成才能繼續(xù)自己的任務(wù)。
針對以上情形,bash提供了一個內(nèi)置的命令來幫助管理異步執(zhí)行。wait命令可以讓父腳本暫停,直到指定的進(jìn)程(比如子腳本)結(jié)束。
wait命令
下面通過兩個例子,演示wait命令的使用:
#!/bin/bash
#
# 異步執(zhí)行(wait)使用樣例-父腳本
#
echo "父腳本:啟動子腳本.."
./async-child &
# 通過將shell參數(shù) $! 賦給pid變量,以記錄子進(jìn)程的進(jìn)程ID
pid=$!
echo "父腳本:子腳本(PID=${pid})已啟動"
echo "父腳本:繼續(xù)執(zhí)行中.."
sleep 2
echo "父腳本:暫停執(zhí)行,等待子腳本執(zhí)行完畢.."
wait ${pid}
echo "父腳本:子腳本已結(jié)束,父腳本繼續(xù).."
echo "父腳本:父腳本執(zhí)行結(jié)束。腳本退出!"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
下面是子腳本:
#!/bin/bash
#
# 異步執(zhí)行(wait)使用樣例-子腳本
#
echo "子腳本:正在運(yùn)行.."
sleep 5
echo "子腳本:子腳本結(jié)束。腳本退出!"
腳本執(zhí)行,產(chǎn)生如下輸出:
[fbap:/home/fbap/usertmp]>./async-parent.sh
父腳本:啟動子腳本..
父腳本:子腳本(PID=42620)已啟動
父腳本:繼續(xù)執(zhí)行中..
子腳本:正在運(yùn)行..
父腳本:暫停執(zhí)行,等待子腳本執(zhí)行完畢..
子腳本:子腳本結(jié)束。腳本退出!
父腳本:子腳本已結(jié)束,父腳本繼續(xù)..
父腳本:父腳本執(zhí)行結(jié)束。腳本退出!