如何杀死除特定进程之外的所有进程

Ati*_*tiq 13 command-line process

在我的本地服务器上,许多 java 进程正在运行,同时我正在使用 Eclipse。现在,当我需要重新启动进程时(我通过 shell 脚本启动进程),在每次启动之前,我需要通过以下方式杀死旧进程:

方法一 kill -9 $Pid :-(每个流程一个一个,比较耗时)

方法 2:- killall -9 java(对于所有进程 - 简单,但 Eclipse 会被不必要地杀死)

在方法 2 的情况下,Eclipse 也会被杀死,这是我永远不想看到的。有没有办法解决这个问题?我打赌一定有:P

编辑:我使用的是 ubuntu 15.04。

May*_*hux 17

试试这个命令:

ps ax | grep "java" | egrep -v "eclipse" | cut -b1-06 | xargs -t kill
Run Code Online (Sandbox Code Playgroud)

这将搜索所有包含 java 并排除 eclipse 的进程然后杀死它们

  • ++1 表示 *not* 不加区别地使用 `-9`。你应该给一个进程优雅退出的机会。 (3认同)
  • @abligh 问题在于`pgrep`,您无法区分哪些进程正在运行eclipse,因为即使`pgrep -l` 也只会报告`java`。@ Maythux,仅供参考,`egrep` 已弃用,不应使用,因为`grep -E` 的作用完全相同,尽管您甚至不需要`grep -E`,因为您匹配的是固定字符串;所以只是`grep -v "eclipse"`(或者,如果你想变得花哨`[...] | grep -F "java" | grep -vF "eclipse | [...]"`) (2认同)

A.B*_*.B. 12

使用 awk

ps ax | awk '/java/ && !/eclipse/ {system("kill "$1)}'
Run Code Online (Sandbox Code Playgroud)

该命令会杀死所有java进程,但不会杀死process eclipse

  • 更优雅(更快)然后来自@maythux 恕我直言的答案...... **;-)** (3认同)