我有以下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
,但script2.sh
启动的Java Swing应用程序仍然保持打开状态。怎么不杀它?
答案 0 :(得分: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
答案 1 :(得分:0)
好吧,如果您在后台模式下启动脚本(使用&
),则在调用脚本退出后继续执行是正常的行为。您需要通过将echo $$
存储到文件来获取第二个脚本的进程ID。然后使相应的脚本具有stop
命令,当您调用它时,该命令将终止此过程。