我有一个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方面不太专业
答案 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`