如何使用shell脚本停止java应用程序

时间:2012-03-29 23:16:05

标签: java shell

我有一个shell脚本,它在opensuse linux下运行,启动一个java应用程序(在jar下),脚本是:

#!/bin/sh

#export JAVA_HOME=/usr/local/java
#PATH=/usr/local/java/bin:${PATH}

#---------------------------------#
# dynamically build the classpath #
#---------------------------------#
THE_CLASSPATH=
for i in `ls ./lib/*.jar`
do
  THE_CLASSPATH=${THE_CLASSPATH}:${i}
done

#---------------------------#
# run the application #
#---------------------------#
java -server -Xms512M -Xmx1G -cp ".:${THE_CLASSPATH}"  com.package.MyApp > myApp.out 2>&0 &   

这个脚本运行正常。

现在,我想要的是编写一个脚本来优雅地杀死这个应用程序,允许我用Linux kill命令中的-15参数杀死它。

问题是,这个服务器上会运行很多java应用程序,所以我需要专门杀掉这个。

任何帮助?

提前致谢,

费尔南多

3 个答案:

答案 0 :(得分:3)

将进程ID存储在文件中:

java ...blabla... &
echo $! > MyApp.pid

然后你可以用kill -TERM $(cat MyApp.pid)杀死JVM。

或者,您可以使用jps列出系统上的java进程。它列出了用于启动应用程序的进程ID和mainclass或jar文件,这可能足以识别您的应用程序。例如:

$ jps
20168 MyAPp
20186 Jps
$ kill -TERM 20168

有关jps的更多信息:http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jps.html

答案 1 :(得分:2)

将背景应用的PID写入有用的地方。

echo $! > /var/lib/MyApp.pid

然后在你的其他脚本中杀死那个PID。

答案 2 :(得分:0)

使用ps xa时,您可以获取正在运行的进程列表,包括用于启动它的完整命令。如果您不想像其他人提到的那样使用临时文件,您可以使用grep for java以及您的类或jar名称。

ps xa | grep java | grep com.package.MyApp | xargs kill -15