2017-04-06 14 views
0

小さなbashスクリプトの作成。 私は、プロセスを生成してから返り、生成されたプロセスを実行したままにするコマンドを持っています。生成されたプロセスが終了するのを待ってから、いくつかのコマンドを実行する必要があります。これどうやってするの?Linux、Bashは、生成されたプロセスが終了した後にスクリプト内のコマンドを実行します。

特定の場合には、次のとおりです。ただし

VBoxManage startvm "my_vm" 
#when my_vm closes 
do_things 

、私は他の文脈で前にこの問題に遭遇してきたので、可能であれば、私はむしろちょうど1 VirtualBoxのVMのに関係するよりも、一般的な解決策を探しています。

+0

あなたは、あなたが待っているプロセスを識別するための信頼できる方法を持っていますか? – Fred

答えて

0

は、私は答えを持って、そしてそれがVBoxのVMのコンテキストでは

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

きれいではありません、以下の英雄的なワンライナーは成功しました。これを実行する

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がシャットダウンした後まで出力されなかったことを見ることができました。

良い悲しみは、左フィールドからのコマンドのオプションの副作用よりも優れた悲嘆をする必要があります。より良い答え?しばらくお待ちください...

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 

うまくいけば、することができます特定のニーズに同調これ。

関連する問題