我正在研究Gradle Java项目。它启动Tomcat进行测试并在以后停止。 我应该在测试失败时杀死这个Tomcat实例。 我尝试使用“ps aux | grep tomcat | grep -v grap | awk {print $ 2}”命令来获取进程ID并终止进程。 但是在Production上,很多用户会同时运行很多Tomcat进程,我只想让我的build.gradle启动tomcat进程进行测试执行。 那么我该如何完成任务呢?请给我一些指导。
答案 0 :(得分:1)
终止Tomcat实例的正确方法是通过自己的shutdown
命令。你根本不应该考虑进程,PID或者杀戮。
答案 1 :(得分:1)
您需要在'ps aux'的输出中找到一个唯一的字符串,以区分您的测试tomcat和其他人。
我目前使用以下脚本首先运行'shutdown.sh',然后在大多数情况下终止PID,应用程序停止但进程不会停止。
PID=`ps -ef | grep $JAVA_HOME/bin/java | grep "$TOMCAT_LOC"/conf | grep -v grep | awk '{ print $2 }'`
if [ $PID ]; then
echo tomcat is running with PID:$PID.
# Stop or Kill running Tomcat
if [[ -f $TOMCAT_LOC/bin/shutdown.sh ]]; then
[[ ! -x $TOMCAT_LOC/bin/shutdown.sh ]] && chmod a+x $TOMCAT_LOC/bin/shutdown.sh
$TOMCAT_LOC/bin/shutdown.sh >>/dev/null
sleep 20
fi
kill -9 $PID
sleep 3
else
echo tomcat is not running
fi
您还可以通过编辑'catalina.sh'来查看配置PID文件,稍后您可以阅读该文件以找出您的PID。
# CATALINA_PID (Optional) Path of the file which should contains the pid
# of the catalina startup java process, when start (fork) is
# used
答案 2 :(得分:0)
所以,如果您想要从已登录用户中删除tomcat,请尝试关注并告诉我这是否对您有所帮助。
ps -ef | grep -v grep | grep `whoami` | grep tomcat
所以通过ps -ef我列出了所有进程然后grep -v grep将删除grep命令的进程然后grep whoami
将查找你当前登录的用户然后grep tomcat将只查找tomcat进程,测试一次,如果All is Well那么你可以杀死它。
顺便说一下tomcat如何停止脚本?如果它在那里你也可以使用它。
答案 3 :(得分:0)
Java JRE在jps
文件夹中有一个名为$JAVA_HOME/bin
的工具。
它与unix ps
命令相似,但仅适用于Java。
您可以使用它来确定所需的exac java进程。
建议您使用此工具,并且当主机上运行多个Java应用程序时,实际上更有用。
例如,我已经运行了h2数据库和许多其他应用程序,但只想杀死h2,因此我可以使用jps将其获取为PID
$ jps
17810 GradleDaemon
17798 GradleWrapperMain
17816 h2-1.4.197.jar
17817 GradleDaemon
17818 GradleDaemon
18011 Jps
16479
然后杀死所需的进程:
kill -9 17816
和所有其他Java应用程序将继续正常运行。我不确定tomcat,但是我认为可以通过类似的方式来完成,例如:
kill -9 $(jps | grep tomcat | awk '{print $1}')
最后,有点题外话,但是对于您的情况来说是特殊的:正确的方法是使用tomcat提供的启动/停止/重新启动脚本
答案 4 :(得分:-1)
您可以使用shell变量$!
。它表示最近的后台命令的PID。
yourCommand &
CMD_PID=$!
echo $CMD_PID