57

使用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
4

15 回答 15

161

不需要知道 Tomcat 的 pid(进程 ID)来杀死它。您可以使用以下命令杀死 Tomcat:

pkill -9 -f tomcat
于 2015-04-02T05:50:39.497 回答
23

ps -ef | grep tomcat | awk '{打印 $2}' | xargs 杀死 -9

https://gist.github.com/nrshrivatsan/1d2ea4fcdcb9d1857076

第1部分

ps -ef | grep tomcat => 用tomcat grep 获取所有进程

第2部分

一旦我们有了流程详细信息,我们将其通过管道传输到脚本的第 2 部分

awk '{打印 $2}' | xargs kill -9 => 获取第二列 [Process id] 并使用 -9 选项杀死它们

希望这可以帮助。

于 2014-07-07T19:53:49.210 回答
19

Tomcat 没有运行。您的搜索向您展示了 grep 进程,该进程正在搜索 tomcat。当然,当您看到该输出时,grep 不再运行,因此 pid 不再有效。

于 2013-03-05T23:46:24.283 回答
15

只需在终端中输入以下命令

ps -ef |grep 'catalina'

复制进程 ID 的值,然后键入以下命令并粘贴进程 ID

 kill -9 processid
于 2014-04-17T14:56:47.483 回答
12

正如其他人已经指出的那样,您已经看到了 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

于 2013-03-05T23:59:28.267 回答
5
ps -Af | grep "tomcat" | grep -v grep | awk '{print$2}' | xargs kill -9
于 2017-04-07T08:07:46.430 回答
4

tomcat/bin/catalina.sh

在评论部分结束后添加以下行:

CATALINA_PID=someFile.txt

然后,要杀死正在运行的 Tomcat 实例,您可以使用:

kill -9 `cat someFile.txt`
于 2017-05-03T06:56:57.210 回答
2
ps -ef

将列出您当前正在运行的所有进程

| grep tomcat

将输出传递给grep并查找 tomcat 的实例。由于grep它本身就是一个进程,因此它是从您的命令返回的。但是,您的输出显示没有运行 Tomcat 的进程。

于 2013-03-05T23:48:26.887 回答
1

这很好用(找到tomcat进程并强行杀死它们)

ps -ef | grep tomcat | awk '{print $2}' | xargs kill -9
于 2019-06-03T16:32:51.433 回答
1

这对我有用:

第 1 步:回声ps aux | grep org.apache.catalina.startup.Bootstrap | grep -v grep | awk '{ print $2 }'

上面的命令返回“process_id”

Step 2: kill -9 process_id
// 这个 process_id 和 Step 1: output 一样

于 2016-10-14T11:49:45.227 回答
0
kill -9 $(ps -ef | grep 8084 | awk 'NR==2{print $2}')

NR 表示输入文件中的记录数。 awk可以查找或替换文本

于 2017-07-24T10:48:33.800 回答
0

正如@Aurand 所说,tomcat 没有运行。你可以使用

ps -ef |grep java | grep tomcat命令忽略ps程序。

在 shell scripte 文件中为我工作。

于 2016-12-06T16:31:40.013 回答
0

要按名称终止进程,我使用以下命令

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。

于 2017-11-10T11:57:38.357 回答
0

对于 mac 用户,

这是唯一对我有用的解决方案。

sudo kill -9 `sudo lsof -t -i:8080`

注意:将8080替换为您的端口号

于 2022-01-30T10:32:47.353 回答
0

我不得不终止服务器上许多java进程中的activeMQ java进程,而这个进程是由特定用户启动的(用户名是activemq)。如此好的分离方法可能是由特定用户启动一个进程:

ps -ef | grep "activemq" | awk '{print $2}' | xargs kill -9
于 2016-09-16T08:30:41.233 回答