2011-07-21 2 views
2

Firefoxのウィンドウを閉じると、または何らかの方法でこのスクリプトを停止した場合、morbor-serverがバックグラウンドプロセスとしてここで呼び出されることは自動的にシャットダウン/強制終了されますか?次のコマンドの終了後にbashから開始されたバックグラウンドプロセスを停止するにはどうしたらいいですか?

#!/bin/bash 

morbo Mojolicious_Lite.pl & 

firefox -new-window http://localhost:3000/ 

答えて

7

これで解決しましょう。この1つは動作するはず

#!/bin/bash 
morbo Mojolicious_Lite.pl & P=$! 
trap "kill $P" INT # maybe you want EXIT here too? 
firefox -new-window http://localhost:3000/ 
wait 

... Firefoxが終了すると、シェルは、Ctrl + Cキーで中断することができ、残りのジョブ(morbo)を待ちます - トラップはそれらを殺し、その場合には。

1

$_変数は、最後のバックグラウンドジョブのPIDです。あなたのプロセスを殺すためにそれを使用してください。エラー/シグナルを捕捉するには、trapを使用します(man bashには例があります)。

+3

それは$です)。

あなたは

bash -x run.sh 

run.shと呼ばれるスクリプトを仮定して(すなわち、実行されます何を見て)視覚的にそれをテストすることができます! $ _ではありません。 –

+0

firefox-windowのクローズをどのように捕まえることができますか? –

+1

@Fritschy:はい!あなたが正しい。元に。ポスター:画面に既にFirefoxのウィンドウがある場合は複雑になりますが、すべての場合にはできません。ユーザーが新しいタブを開いて元のタブを閉じるとどうなりますか?あなたがウィンドウが閉じたときを知ることができたとしても、それは遅すぎるでしょう。あなたがタブを閉じることができます(あなたはできませんが、とにかく)。ユーザーがタブを閉じて「最後のタブを元に戻す」を実行するとどうなりますか? 「重複タブ」はどうですか?要するに、アプローチを再考してください。 –

1

bash $ _は、前のコマンドの最後の引数です。バックグラウンドジョブを強制終了するには、ジョブ番号(またはPID)を使用する必要があります。ジョブ番号を使用する例:

[15:29:29 ~]$ gvim & 
[2] 28509 
[15:29:31 ~]$ kill %2 
[15:29:39 ~]$ 
[2]+ Terminated    gvim 
[15:29:42 ~]$ 

[2]はジョブ番号で、バックグラウンド処理を開始するときに表示されます。

+0

firefox-windowのクローズをどのように捕まえることができますか? –

関連する問題