如何使用终端过滤和终止一些 java 进程?

如何使用终端过滤和终止一些 java 进程?

我有ps aux | grep -v 'grep' | grep "java" | awk '{print $2}'可以过滤所有 java 进程的命令,但我的问题是我想只选择名称包含core或 的进程nimbus。还有其他 java 进程(如 eclipse 和邮件服务器)同时运行,我不希望它们在那里。

我已经检查过了终止 Java 进程

我是脚本编写新手,所以如果问题有点愚蠢,请原谅我。谢谢!

答案1

pkill -f 'java.*(core|nimbus)'

我没有像您那样的 Java 设置,但我在服务器上运行了大量 Django 应用程序。类似的情况是它们看起来都像 UWSGI 进程。以下是其中的一部分ps aux | grep uwsgi

oli       7201  0.0  1.0  70324 20936 ?        S    12:54   0:00 /web/venv/bin/uwsgi --include /web/django-uwsgi.ini --ini /web/asvsforms/uwsgi.ini
oli       7202  0.0  1.0  70336 20956 ?        S    12:54   0:00 /web/venv/bin/uwsgi --include /web/django-uwsgi.ini --ini /web/bnc/uwsgi.ini
oli       7203  0.0  1.0  70456 21016 ?        S    12:54   0:00 /web/venv/bin/uwsgi --include /web/django-uwsgi.ini --ini /web/cleanup/uwsgi.ini
oli       7204  0.0  1.0  70272 21068 ?        S    12:54   0:00 /web/venv/bin/uwsgi --include /web/django-uwsgi.ini --ini /web/emwill/uwsgi.ini
oli       7205  0.0  1.3  88336 28124 ?        S    12:54   0:00 /web/venv/bin/uwsgi --include /web/django-uwsgi.ini --ini /web/qi/uwsgi.ini
oli       7206  0.0  1.0  70256 20996 ?        S    12:54   0:00 /web/venv/bin/uwsgi --include /web/django-uwsgi.ini --ini /web/sbaccuracy/uwsgi.ini

你可以awk把它放下来(你不需要grep awk)但请看一下pgrep

$ pgrep -af 'uwsgi.*cleanup'
7203 /web/venv/bin/uwsgi --include /web/django-uwsgi.ini --ini /web/cleanup/uwsgi.ini
7217 /web/venv/bin/uwsgi --include /web/django-uwsgi.ini --ini /web/cleanup/uwsgi.ini

这里真正需要的是-f。这将模式搜索扩展到用于运行某些东西的整个命令行。如果没有它,它只会搜索第一部分。-a只是在这里输出整行。

无论如何,我们只需切换到pkill实际上是相同的命令。它没有相同的输出功能,但这不是它的设计目的。这让我们回到了答案的顶部。


如果您坚持要过滤ps,请不要使用ps|grep|grep|awk|egrep|awk|xargs kill或任何目前建议的。这看起来很愚蠢。一个人awk就能完成所有过滤

ps aux | awk '/java.*(core|nimbus)/ {print $2}'

此外,你可以发送要杀死的列表直接在awk

ps aux | awk '/java.*(core|nimbus)/ {print $2 | kill}'

pgrep但我仍然会选择pkill

答案2

快完成了。要选择流程,您可以执行以下操作:

ps aux | grep -v 'grep' | grep "java" |egrep -E "core|nimbus"

当这给出了您需要的进程时,您可以一次性终止它们:

ps aux | grep -v 'grep' | grep "java" | egrep -E "core|nimbus" | awk '{print $2}' |xargs -n 1 kill

答案3

快完成了!试试这个:

ps aux | grep -v 'grep' | grep "java" | awk '/core/ || /nimbus/ {print $2;}'

然后你可以终止进程,例如Maarten 已发布或以下,或者这样:

kill -9 `ps aux | grep -v 'grep' | grep "java" | awk '/core/ || /nimbus/ {print $2;}'`

相关内容