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

时间:2013-10-29 07:13:11

标签: java linux process jar

我有一个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!!!!!!!!!!"

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

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

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

希望它解释了我的问题。我在linux和Java方面不太专业

2 个答案:

答案 0 :(得分:2)

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

System.exit(0);

答案 1 :(得分:1)

将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`
相关问题