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

时间:2017-04-06 00:02:54

标签: linux bash shell scripting

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

具体案例是:

import_meta_graph()

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

2 个答案:

答案 0 :(得分:0)

我有一个答案,而且不是很好

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'。

好悲伤,需要有一个更好的方法来做到这一点,而不是左场的命令选项的副作用。有更好的答案吗?请....

答案 1 :(得分: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

希望您可以根据自己的特定需求进行调整。