0

我有一个执行一些 Web 服务调用的 Java 程序。我将该程序打包在一个 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 方面不太专业

4

2 回答 2

2

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

System.exit(0);
于 2013-10-29T07:16:00.920 回答
1

write PID of your java process into file:

#!/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!!!!!!!!!!"

and kill it upon cron:

kill -9 `cat program.pid`
于 2013-10-29T07:20:48.393 回答