如何在 JAR 完成执行后终止 Java 进程



我有一个Java程序,可以执行一些Web服务调用。 我将该程序打包在一个JAR文件中,并将其放在我的Linux机器中。然后我做了一个.sh文件,其内容是

#!/bin/sh 
. /etc/profile 
echo "The Script Starts now!!!!!!!!!!" 
export JAVA_HOME=/u01/app/oracle/java/java64/jrockit-jdk1.6.0_29 
export PATH=$JAVA_HOME/bin:$PATH 
cd /u01/CRM_PRD/stores/CRM_COC_Utility/Jars 
java -jar CRM_AccountCOC.jar 
echo "The Script ends now!!!!!!!!!!"

我在 cronjob 中安排的这个 sh 文件每 45 分钟运行一次,这意味着上述命令每 45 分钟执行一次。

问题是当我执行 TOP 命令时,说一两天后,我可以看到这个 JAR 的多个执行状态。因此,我的 linux 服务器的 %CPU 使用率增加了。

JAR 需要 10 分钟才能完成,重新执行 JAR 的频率是在 45 分钟后。所以我需要在代码或 sh 文件中做什么,这样当这个 JAR 执行时,java 进程也会被杀死。

希望它能解释我的问题。我对Linux和Java不是很专业

基本上,如果所有非守护进程线程都完成了,那么 java 应用程序就会终止。但是,您可以通过以下方式强制终止它:

System.exit(0);

Java 进程的PID写入文件:

#!/bin/sh 
. /etc/profile 
echo "The Script Starts now!!!!!!!!!!" 
export JAVA_HOME=/u01/app/oracle/java/java64/jrockit-jdk1.6.0_29 
export PATH=$JAVA_HOME/bin:$PATH 
cd /u01/CRM_PRD/stores/CRM_COC_Utility/Jars 
java -jar CRM_AccountCOC.jar & # run jar as background process
echo $! > program.pid
echo "The Script ends now!!!!!!!!!!"

并在cron时杀死它:

kill -9 `cat program.pid`

最新更新