我有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;}'`