簡體   English   中英

如果通過CTRL + C終止腳本,如何終止腳本啟動的Java進程?

[英]How to kill a Java process started by a script if script was terminated via CTRL + C?

我有以下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應用程序仍然保持打開狀態。 怎么不殺它呢?

我覺得這樣的事情對你有用。 但是,正如@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

好吧,如果你在后台模式下啟動腳本(使用& ),它在調用腳本退出后繼續執行是正常的行為。 您需要通過將echo $$存儲到文件來獲取第二個腳本的進程ID。 然后使相應的腳本具有一個stop命令,當您調用它時,該命令將stop此過程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM