簡體   English   中英

Linux,Bash在生成的進程結束后在腳本中執行命令

[英]Linux, Bash execute commands in script after spawned process has ended

編寫一個小的bash腳本。 我有一個命令,該命令可以生成一個進程,然后返回,從而使生成的進程繼續運行。 我需要等待生成的進程終止,然后運行一些命令。 我怎樣才能做到這一點?

具體情況是:

VBoxManage startvm "my_vm"
#when my_vm closes
do_things

但是,我之前在其他情況下都曾遇到過此問題,因此,如果可能的話,我正在尋找一種通用的解決方案,而不僅僅是與virtualbox vm相關的解決方案。

我有一個答案,它不是很漂亮

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

在VBox vm的情況下,以下英雄式的單線被證明是成功的。

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

希望您可以根據自己的特定需求進行調整。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM