Linux,Bash在生成的进程结束后在脚本中执行命令

Linux,Bash在生成的进程结束后在脚本中执行命令,linux,bash,shell,scripting,Linux,Bash,Shell,Scripting,编写一个小bash脚本。 我有一个命令,生成一个进程,然后返回,使生成的进程继续运行。我需要等待生成的进程终止,然后运行一些命令。我该怎么做 具体情况如下: VBoxManage startvm "my_vm" #when my_vm closes do_things 然而,我以前在其他环境中也遇到过这个问题,所以如果可能的话,我正在寻找一个通用的解决方案,而不仅仅是一个与virtualbox vm相关的解决方案。我有一个答案,但它并不漂亮 tail --pid=$pid -f /dev/nu

编写一个小bash脚本。 我有一个命令,生成一个进程,然后返回,使生成的进程继续运行。我需要等待生成的进程终止,然后运行一些命令。我该怎么做

具体情况如下:

VBoxManage startvm "my_vm"
#when my_vm closes
do_things

然而,我以前在其他环境中也遇到过这个问题,所以如果可能的话,我正在寻找一个通用的解决方案,而不仅仅是一个与virtualbox vm相关的解决方案。

我有一个答案,但它并不漂亮

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
运行这个,我可以看到“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

希望您能根据自己的具体需要调整此选项。

您是否有可靠的方法来确定您希望等待的流程?