2014-03-27 60 views
0

我写了一个在后台运行的java程序。它工作正常,它可以等待它。 我在Windows中编写了一个bat文件来运行它。为什么java程序在应用程序完成时没有关闭?

@echo off 
start .\jre7\bin\java.exe -jar ".\my_jar.jar" 
exit 

当我运行这个文件.bat我可以看到它任务管理器和它的工作原理,当它结束时,java.exe的过程是在任务管理器关闭。 它适用于鳍的Windows 但是当我在sh文件在Linux上运行它,它 Java程序工作正常,因为它做什么,我从它等待,但对系统正监视的java过程不关闭。我想让它像Windows一样靠近。 在sh文件中:

export JAVA_HOME="/app/myfolder/java/jre1.7.0_51" 
export I_HOME="/app/myfolder/code" 

cd $I_HOME 

$JAVA_HOME/bin/java -jar my_jar.jar 
RStat=$? 

什么问题?

回答

1

您也可以终止与应用:

System.exit(0); 
+0

我没有调用* System.exit(0)*,但为什么我需要它,因为在Windows中消失时,应用程序完成? –

0

你把线程设置为守护进程吗?

public final void setDaemon(boolean on) 

从JavaDoc的:

将该线程标记为守护线程或用户线程。 Java虚拟机退出时正在运行的线程都是守护线程

+0

感谢您的回答,我不明白我可以在哪里设置它,我不设置它。并在Windows中运行,但在Linux中它表现不同,是否正常 –

+0

什么是“你的线程”?你当然不希望主线程是守护进程。但是,知道OP是否有任何额外的非守护线程运行 - 但为什么只在Linux上呢? –

1

它绝对不正常的表现优雅的窗口,而不是终止在Linux 。 由于您使用的任何本地库的差异,您的jar可能只是挂在linux上,您是否尝试过调用System.exit()?

+0

我没有调用* System.exit()?*但为什么我需要它,因为在Windows中消失时,应用程序完成? –

+0

有很多原因会导致你需要它。最常见的情况是一个大型或复杂的应用程序,其中有许多线程需要在应用程序级别关闭,因为它们彼此之间可能没有洞察力。否则,这只是一个好习惯,你应该在应用程序应该正常终止的地方调用System.exit(0),否则定义错误代码。 java -jar不可能挂在linux上,而不能挂在windows上,它是挂在你的jar上的。 – rpg711

相关问题