如何使用shell脚本
我有一个shell脚本,这是一个的openSUSE Linux下运行,启动Java应用程序(一个罐子下),脚本阻止Java应用程序:如何使用shell脚本
#!/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应用程序,所以我需要专门杀死这个。
任何帮助?
由于提前,
费尔南多
写转到后台应用程序的PID某处有用。
echo $! > /var/lib/MyApp.pid
然后杀死你的其他脚本中的PID。
谢谢@ ignacio-vazquez-abrams,答案的其余部分在此处找到: http://stackoverflow.com/问题/ 8884480 /开始和结束 - java-app-with-shell-script-debian – 2012-03-30 17:04:23
存放在一个文件中的进程ID:
java ...blabla... &
echo $! > MyApp.pid
然后你就可以用kill -TERM $(cat MyApp.pid)
取消JVM。
或者,您可以使用jps
列出系统上的java进程。它列出了用于启动应用程序的进程ID和主类或jar文件,这可能足以识别您的应用程序。例如:
$ jps
20168 MyAPp
20186 Jps
$ kill -TERM 20168
更多信息上jps
:http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jps.html
谢谢@Joni Salonen,但我不能使用jps。不过,这非常有帮助。 – 2012-03-30 17:01:51
当您使用ps xa
你可以得到正在运行的进程,包括用于启动它的完整的命令列表。如果你不想像其他人提到的那样使用临时文件,你可以grep for java以及你的类或jar名称。
ps xa | grep java | grep com.package.MyApp | xargs kill -15
请注意您的问题,但是您可以/应该将您的应用程序放入jar中,并在其清单文件中通过相对路径提及所有库。请参阅:http://docs.oracle.com/javase/tutorial/deployment/jar/downman.html – Dave 2012-03-29 23:24:42