【问题标题】:How to terminate the Java process when the JAR has finished executionJAR 完成执行后如何终止 Java 进程
【发布时间】:2013-10-29 07:13:11
【问题描述】:

我有一个 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 应用程序运行 45 分钟,而你将它编程为运行 10 分钟。尝试查找是否有任何阻塞线程。如果 java 应用程序正在终止,那么您不需要从 Linux 执行任何强制终止

标签: java linux process jar


【解决方案1】:

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

System.exit(0);

【讨论】:

    【解决方案2】:

    将你的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`
    

    【讨论】:

      猜你喜欢
      • 2021-06-17
      • 1970-01-01
      • 2011-10-12
      • 1970-01-01
      • 1970-01-01
      • 2011-04-14
      • 2014-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多