我通过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)
答案 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
异常的原因。