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