无法阻止甚至杀死tomcat进程

时间:2017-03-30 07:46:59

标签: java macos tomcat

我通过tomcat启动了./catalina.sh start服务,现在我想停止/杀死它 - 它不会这样做。

当我开始使用脚本时,我有两个进程:

my-user   2728   2.2  0.8  4480236 138448 s001  S     9:52AM   0:01.82 "some -Djava configurations and executables"
my-user   2737   0.0  0.0  2434840    800 s001  S+    9:53AM   0:00.00 grep tomcat

当我运行./catalina.sh stop(或./shutdown.sh)时,它将仅停止第一个进程。然后对于另一个我尝试pkill -9 -f tomcat,但它没有做到这一点。而且这个过程基本上每秒都会改变它的PID,所以我不能试图用PID来杀死它。

尝试通过关闭脚本再次关闭它会引发异常:

SEVERE: Catalina.stop:
java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at java.net.Socket.connect(Socket.java:538)
    at java.net.Socket.<init>(Socket.java:434)
    at java.net.Socket.<init>(Socket.java:211)
    at org.apache.catalina.startup.Catalina.stopServer(Catalina.java:450)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.catalina.startup.Bootstrap.stopServer(Bootstrap.java:400)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:487)

3 个答案:

答案 0 :(得分:0)

您可以尝试使用以下命令

    sudo kill -9 $(ps aux | grep '[c]atalina' | awk '{print $2}')

如果有帮助请告诉我

答案 1 :(得分:0)

尝试使用以下命令来杀死导致grep的所有进程。

ps -Af | grep&#34; tomcat&#34; | grep -v grep | awk&#39; {print $ 2}&#39; | xargs kill -9

答案 2 :(得分:0)

我怀疑你得到了输出:

my-user   2728   2.2  0.8  4480236 138448 s001  S     9:52AM   0:01.82 "some -Djava configurations and executables"
my-user   2737   0.0  0.0  2434840    800 s001  S+    9:53AM   0:00.00 grep tomcat

...来自命令ps aux | grep tomcat

第一行是您的Tomcat进程。第二行是你刚刚开始的grep

这解释了为什么PID“每秒都会改变”(它每次都会改变,因为它是一个新的grep),以及为什么在看到它的输出后你无法杀死它。

通过运行(例如)ps aux | grep i_do_not_expect_to_find_this

来证明这一点

避免这种情况的一个巧妙方法是使你的grep模式的一个char成为一个字符类:

$ ps aux | grep [t]omcat

因为这个正则表达式匹配“tomcat”但与“[t] \ tomcat”不匹配,ps | grep将不再看到它自己的grep。

除此之外,根据您的描述,听起来好像./catalina.sh stop正常工作。它通过与属于Tomcat的管理端口建立套接字连接并请求关闭来工作。这解释了为什么在进程停止时会出现Connection refused异常的原因。