Java 无法停止甚至终止tomcat进程
我通过Java 无法停止甚至终止tomcat进程,java,macos,tomcat,Java,Macos,Tomcat,我通过/catalina.sh start启动了一个tomcat服务,现在我想停止/杀死它-它不会这样做 当我用脚本开始时,我有两个过程: 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
/catalina.sh start
启动了一个tomcat
服务,现在我想停止/杀死它-它不会这样做
当我用脚本开始时,我有两个过程:
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)
严重:Catalina.stop:
java.net.ConnectException:连接被拒绝
位于java.net.PlainSocketImpl.socketConnect(本机方法)
位于java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
位于java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
位于java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
位于java.net.socksocketimpl.connect(socksocketimpl.java:392)
位于java.net.Socket.connect(Socket.java:589)
位于java.net.Socket.connect(Socket.java:538)
位于java.net.Socket。(Socket.java:434)
位于java.net.Socket。(Socket.java:211)
位于org.apache.catalina.startup.catalina.stopServer(catalina.java:450)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:498)
位于org.apache.catalina.startup.Bootstrap.stopServer(Bootstrap.java:400)
位于org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:487)
您可以尝试使用下面的命令sudo kill-9$(ps aux | grep'[c]atalina''awk'{print$2}')
让我知道它是否有帮助请尝试下面的命令,该命令将杀死所有导致grep的进程
ps-Af | grep“tomcat”| grep-v grep | awk{print$2}| xargs kill-9我怀疑您得到了输出:
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_don_not_expect_find_this
避免这种情况的一个巧妙技巧是将grep模式的一个字符作为字符类:
$ ps aux | grep [t]omcat
因为这个正则表达式与“tomcat”匹配,但与“[t]omcat”不匹配,ps | grep
将不再看到自己的grep
除此之外,根据您的描述,听起来好像
/catalina.sh stop
工作正常。它通过与Tomcat的管理端口建立套接字连接并请求关闭来工作。这解释了当进程已经停止时,为什么会出现连接被拒绝的异常。您的tomcat是集群环境吗?我不确定。我怎么知道呢?这又有什么区别呢?对于'[c]atalina'
来说,它给了我一个错误,错误地使用了kill
,所以我把它改成了'catalina'
,但它不起作用-我得到了kill::没有这样的过程。当我尝试grep查找'tomcat'
时也是如此。