3

私は次のものを持っていますscript1.sh

#!/bin/bash

trap 'echo "Exit signal detected..."; kill %1' 0 1 2 3 15

./script2.sh & #starts a java app
./script3.sh #starts a different java app

CTRL + C を実行すると終了しますscript1.shが、起動した Java Swing アプリscript2.shは開いたままです。どうして殺さないの?

4

2 に答える 2

1

このようなものがあなたのために働くことができると思います。ただし、@ carlspring が述べたように、各スクリプトに似たようなものを用意して、同じ割り込みをキャッチし、欠落している子プロセスを強制終了できるようにすることをお勧めします。

何でも取る

#!/bin/bash

# Store subproccess PIDS
PID1=""
PID2=""

# Call whenever Ctrl-C is invoked
exit_signal(){
    echo "Sending termination signal to childs"
    kill -s SIGINT $PID1 $PID2
    echo "Childs should be terminated now"
    exit 2
}

trap exit_signal SIGINT

# Start proccess and store its PID, so we can kill it latter
proccess1 &
PID1=$!
proccess2 &
PID2=$!

# Keep this process open so we can close it with Ctrl-C
while true; do
    sleep 1
done
于 2013-02-13T07:43:25.663 に答える
0

スクリプトをバックグラウンド モードで ( を使用して&) 開始している場合、呼び出し元のスクリプトが終了した後もスクリプトが実行され続けるのは正常な動作です。ファイルに保存して、2 番目のスクリプトのプロセス ID を取得する必要がありecho $$ます。次に、それぞれのスクリプトに、stopこのプロセスを呼び出すときにこのプロセスを強制終了するコマンドを含めます。

于 2012-06-25T08:29:26.693 に答える