获取刚刚开始的进程的PID

时间:2017-07-17 08:47:00

标签: java shell tomcat gradle process

我正在研究Gradle Java项目。它启动Tomcat进行测试并在以后停止。 我应该在测试失败时杀死这个Tomcat实例。 我尝试使用“ps aux | grep tomcat | grep -v grap | awk {print $ 2}”命令来获取进程ID并终止进程。 但是在Production上,很多用户会同时运行很多Tomcat进程,我只想让我的build.gradle启动tomcat进程进行测试执行。 那么我该如何完成任务呢?请给我一些指导。

5 个答案:

答案 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