2017-04-06 66 views
0

編寫一個小的bash腳本。 我有一個命令產生一個進程然後返回,留下產生的進程運行。我需要等待產生的進程終止,然後運行一些命令。我怎樣才能做到這一點?Linux,Bash在產生進程結束後在腳本中執行命令

的具體情況是:

VBoxManage startvm "my_vm" 
#when my_vm closes 
do_things 

不過,我已經在其他情況下遇到過這個問題,所以如果可能的話我在尋找一個通用的解決方案,而不僅僅是一個有關的VirtualBox虛擬機。

+0

您是否有可靠的方法來確定您想要等待的過程? – Fred

回答

0

我有一個答案,這不是很

tail --pid=$pid -f /dev/null 

在VBox中虛擬機的情況下,以下英勇的一行已經證明是成功的。

VBoxManage startvm "my_vm"; tail --pid=$(awk '/Process ID:/ {print $4;}' /path_to/my_vm/Logs/VBox.log) -f /dev/null; echo hello 

運行此操作,直到my_vm關閉後,才能看到'hello'輸出。

好悲傷,需要有一個更好的方式來做到這一點,而不是左邊的命令選項的副作用。任何更好的答案?請......

0

不幸的是,我認爲你不能將VirtualBox(或任何在後臺產生進程的進程)概括爲一刀切的解決方案。

這是一個VirtualBox的具體答案。

正如你注意到VBox在後臺運行機器(和其他一些東西)。但是,你可以查詢VBoxManage什麼是運行:

vm_name="my_vm" 
VBoxManage startvm $vm_name 
while [[ `VBoxManage list runningvms | grep $vm_name` ]]; do 
    echo Sleeping ... 
    sleep 5 
done 
echo Done! 
do_things 

希望你可以調整這個以您的特定需求。