2017-01-09 1 views
1

私は、バックグラウンドで起動する別のスクリプトを実行するscriptAを持っています。今私はscriptA(cmd + c)を殺すとバック​​グラウンドプロセスも殺されることを確認する必要があります。スクリプトが存在するときにバックグラウンドプロセスを強制終了する

#!/bin/bash 
echo "This script is about to run another script." 
    sh ../processes/processb/bin/startserver.sh & 
FOO_PID=$! 
echo "This script has just run another script." $FOO_PID 

このスクリプトはうまく実行されますが、私はCMD + Cを押し、FOO_PID値に「psの」コマンドを実行すると、そのプロセスはまだ存在しています。私は間違って何をしていますか?

UPDATE -----------

だから私は、コードの下に試してみたが、それでもscriptCのプロセスが殺されていません。私はちょうどCtrlキー+ cを押すとscriptA(親)を終了すると思いますので、トラップコマンドが実行されないのですか?

 #!/bin/bash 

echo "This script is about to run another script." 

    ../common/samples/bin/scriptC.sh & 
mypid=$! 
kill -0 "$mypid" && echo "My process is still alive." 

echo "This script has just run another script." $mypid 

trap "kill $mypid && kill $$" INT 

答えて

3

SIGINTためtrapを追加します。

trap "kill $FOO_PID && kill $$" INT 

や退出の任意の並べ替えのために、擬似信号EXIT扱う:

trap "kill $FOO_PID && kill $$" EXIT 
+0

をおかげでheemayl、好奇心から、とにかくそれいけません私はここで 'nohup'を使用していないので、殺されますか? – user2894296

+0

@ user2894296これは長い話です。一言で言えば、バックグラウンドプロセスは、自身のプロセスグループ内で実行されています。PIDはPGIDです。 – heemayl

関連する問題