如何在终端中杀死这个 tomcat 进程?
Posted
技术标签:
【中文标题】如何在终端中杀死这个 tomcat 进程?【英文标题】:How do I kill this tomcat process in Terminal? 【发布时间】:2013-02-20 14:12:59 【问题描述】:使用ps -ef | grep tomcat
我发现了一个正在运行的tomcat 服务器。我试过kill -9 id
,但它返回“没有这样的过程”。我究竟做错了什么?
这是一个例子:
Admins-MacBook-Pro:test-parent tom.maxwell$ ps -ef | grep tomcat
2043706342 39707 39695 0 3:40PM ttys000 0:00.00 grep tomcat
Admins-MacBook-Pro:test-parent tom.maxwell$ kill -9 39707
-bash: kill: (39707) - No such process
【问题讨论】:
其实就是grep搜索tomcat。 【参考方案1】:Tomcat 没有运行。您的搜索向您展示了 grep 进程,该进程正在搜索 tomcat。当然,当您看到该输出时,grep 已不再运行,因此 pid 不再有效。
【讨论】:
下次使用 ps -ef | grep [t]omcat【参考方案2】:ps -ef
将列出您当前正在运行的所有进程
| grep tomcat
将输出传递给grep
并查找tomcat 的实例。由于grep
本身就是一个进程,因此它是从您的命令返回的。但是,您的输出显示没有运行 Tomcat 的进程。
【讨论】:
【参考方案3】:正如其他人已经指出的那样,您已经看到了 grep 过程。如果你想将输出限制为 tomcat 本身,你有两种选择
将第一个搜索到的字符包装在一个字符类中
ps -ef | grep '[t]omcat'
这也搜索 tomcat,但错过了 grep [t]omcat
条目,因为它与 [t]omcat
不匹配。
使用 ps 自定义输出格式
ps -e -o pid,comm | grep tomcat
这仅显示进程的 pid 和名称,不显示进程参数。所以,grep 被列为grep
而不是grep tomcat
。
【讨论】:
【参考方案4】:只需在终端输入以下命令
ps -ef |grep 'catalina'
复制进程ID的值,然后键入以下命令并粘贴进程ID
kill -9 processid
【讨论】:
这是第一个在 Linux Mint 18.3 上为我工作的,选择的答案没有效果。 当tomcat通过eclipse运行并且进程名称为“java”时,这对我有用。我的另一个“java”进程是eclipse。请参阅“org.apache.catalina.startup.Bootstrap”的相关答案。【参考方案5】:ps -ef | grep tomcat | awk '打印 $2' | xargs 杀死 -9
https://gist.github.com/nrshrivatsan/1d2ea4fcdcb9d1857076
第 1 部分
ps -ef | grep tomcat => 用tomcat grep 获取所有进程
第 2 部分
一旦我们有了流程详细信息,我们就将其通过管道传输到脚本的第 2 部分
awk 'print $2' | xargs kill -9 => 获取第二列 [Process id] 并使用 -9 选项杀死它们
希望这会有所帮助。
【讨论】:
【参考方案6】:不需要知道 Tomcat 的 pid(进程 ID)来杀死它。可以使用以下命令杀死Tomcat:
pkill -9 -f tomcat
【讨论】:
你拯救了我的一天。 又短又脆。顺便说一句,我有 2 个 tomcat,一个是 tomcat 7,另一个是 tomcat 5 进程,所以它正在杀死 2。我使用了稍微不同的变体pkill -9 -f /tomcat7path
和 pkill -9 -f /tomcat5path
,这样我就可以一次杀死一个。很容易配置为alias
,因为它在命令中没有反引号和单引号....很好的答案
请注意,“-f”匹配所有命令行参数,而不仅仅是进程名,所以即使进程名是“java”,它仍然会匹配。 "pgrep -f tomcat" 显示将匹配的内容。
"pkill -9 -f catalina" 也适用于我。我的eclipse“java”进程在“ps -ef”中也有“tomcat”,但由于某种原因“pgrep -f tomcat”不匹配。【参考方案7】:
我不得不终止服务器上许多java进程中的activeMQ java进程,而这个是由特定用户启动的(用户名为activemq)。 如此好的分离方法可能是由特定用户启动一个进程:
ps -ef | grep "activemq" | awk 'print $2' | xargs kill -9
【讨论】:
【参考方案8】:这对我有用:
第一步:回显ps aux | grep org.apache.catalina.startup.Bootstrap | grep -v grep | awk ' print $2 '
以上命令返回“process_id”
第二步:kill -9 process_id // 这个process_id和第一步一样:输出
【讨论】:
【参考方案9】:正如@Aurand 所说,tomcat 没有运行。你可以使用
ps -ef |grep java | grep tomcat
命令忽略ps
程序。
在 shell scripte 文件中为我工作。
【讨论】:
【参考方案10】:ps -Af | grep "tomcat" | grep -v grep | awk 'print$2' | xargs kill -9
【讨论】:
这是最好的答案。谢谢。【参考方案11】:在tomcat/bin/catalina.sh
在评论部分结束后添加以下行:
CATALINA_PID=someFile.txt
然后,要杀死正在运行的 Tomcat 实例,您可以使用:
kill -9 `cat someFile.txt`
【讨论】:
【参考方案12】:kill -9 $(ps -ef | grep 8084 | awk 'NR==2print $2')
NR 表示输入文件中的记录数。
awk
可以查找或替换文字
【讨论】:
【参考方案13】:要按名称杀死进程,我使用以下命令
ps aux | grep "search-term" | grep -v grep | tr -s " " | cut -d " " -f 2 | xargs kill -9
tr -s " " | cut -d " " -f 2
与 awk 'print $2'
相同。 tr
将制表符空格压缩为单个空格,cut
提供<SPACE>
作为分隔符,并请求第二列。 ps aux
输出中的第二列是进程 ID。
【讨论】:
【参考方案14】:这很好用(找到tomcat进程并强行杀死它们)
ps -ef | grep tomcat | awk 'print $2' | xargs kill -9
【讨论】:
这为我返回了 2 个 pid,它会从其中杀死哪一个?【参考方案15】:对于 Mac 用户,
这是唯一适合我的解决方案。
sudo kill -9 `sudo lsof -t -i:8080`
注意:将 8080 替换为您的端口号
【讨论】:
以上是关于如何在终端中杀死这个 tomcat 进程?的主要内容,如果未能解决你的问题,请参考以下文章