編寫一個小的bash腳本。 我有一個命令產生一個進程然後返回,留下產生的進程運行。我需要等待產生的進程終止,然後運行一些命令。我怎樣才能做到這一點?Linux,Bash在產生進程結束後在腳本中執行命令
的具體情況是:
VBoxManage startvm "my_vm"
#when my_vm closes
do_things
不過,我已經在其他情況下遇到過這個問題,所以如果可能的話我在尋找一個通用的解決方案,而不僅僅是一個有關的VirtualBox虛擬機。
編寫一個小的bash腳本。 我有一個命令產生一個進程然後返回,留下產生的進程運行。我需要等待產生的進程終止,然後運行一些命令。我怎樣才能做到這一點?Linux,Bash在產生進程結束後在腳本中執行命令
的具體情況是:
VBoxManage startvm "my_vm"
#when my_vm closes
do_things
不過,我已經在其他情況下遇到過這個問題,所以如果可能的話我在尋找一個通用的解決方案,而不僅僅是一個有關的VirtualBox虛擬機。
我有一個答案,這不是很
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'輸出。
好悲傷,需要有一個更好的方式來做到這一點,而不是左邊的命令選項的副作用。任何更好的答案?請......
不幸的是,我認爲你不能將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
希望你可以調整這個以您的特定需求。
您是否有可靠的方法來確定您想要等待的過程? – Fred