在我的本地服务器上,许多 Java 进程正在运行,同时我正在使用 Eclipse。现在,当我需要重新启动进程时(我通过 shell 脚本启动进程),每次启动之前我都需要通过以下方式终止旧进程:
方法 1:-(
kill -9 $Pid
逐一执行每个过程,这很耗时)
方法 2:-(
killall -9 java
适用于所有进程 - 简单,但 Eclipse 也会被不必要地杀死)
如果使用方法 2,Eclipse 也会被杀死,这是我最不希望看到的。有什么办法可以解决这个问题吗?我敢打赌肯定有 :P
编辑:我正在使用 ubuntu 15.04。
答案1
尝试一下这个命令:
ps ax | grep "java" | egrep -v "eclipse" | cut -b1-06 | xargs -t kill
这将搜索所有包含 java 并排除 eclipse 的进程,然后终止它们
答案2
使用awk
ps ax | awk '/java/ && !/eclipse/ {system("kill "$1)}'
该命令会终止所有java
进程,但不会终止该进程eclipse
。
答案3
怎么样 :
pgrep -af 'java' | grep -Po '^[^ ]+(?!.*eclipse)' | xargs kill
pgrep -af 'java'
java
在完整命令行中搜索进程并列出它们grep -Po '^[^ ]+(?!.*eclipse)'
在搜索到的进程中查找并获取没有eclipse
完整命令行的进程的进程 IDxargs kill
将终止该进程。
答案4
ps ax | grep "java" | egrep -v "eclipse" | cut -b1-06 | xargs -t kill