На моем локальном сервере запущено много процессов Java, и в то же время я использую Eclipse. Теперь, когда мне нужно перезапустить свои процессы (я запускаю процессы через скрипт оболочки), перед каждым запуском мне нужно убить старые процессы с помощью:
Метод 1: -
kill -9 $Pid
(для каждого процесса один за другим, что занимает много времени)
Способ 2: -
killall -9 java
(для всех процессов - легко, но Eclipse будет убит слишком без необходимости)
В случае метода 2 Eclipse также будет убит, чего я никогда не хочу. Есть ли выход из этого? Бьюсь об заклад, должно быть: P
Изменить: я использую Ubuntu 15.04.
command-line
process
Atiq
источник
источник
Ответы:
Попробуйте эту команду:
это будет искать все процессы, содержащие Java и выполнение затмения, а затем убить их
источник
-9
без разбора. Вы должны когда-нибудь дать процессу возможность изящно выйти.pgrep
лучше, чемps | grep
в противном случае вы рискуете убить сам оператор grep.pgrep
вы не можете различить, какие процессы выполняют затмение, потому что дажеpgrep -l
просто сообщатjava
. @ Maythux, просто для справки,egrep
устарел и не должен использоваться, посколькуgrep -E
делает то же самое, хотя вам даже не нужно,grep -E
поскольку вы соответствуете фиксированной строке; так простоgrep -v "eclipse"
(или если вы хотите быть модным[...] | grep -F "java" | grep -vF "eclipse | [...]"
)pkill '/java\(.*eclipse\)\@!'
\@!
? Если это Perl-ism, то он не сработает, потому чтоpkill
поддерживает только ERE, я попытался свести всю эту задачу к одной команде, уже используемойpkill
с отрицательными взглядами, и по этой причине это не удалось.С помощью
awk
Команда убивает все
java
процессы, но не процессeclipse
.источник
Как насчет :
pgrep -af 'java'
ищетjava
в полной командной строке процессы и перечисляет ихgrep -Po '^[^ ]+(?!.*eclipse)'
ищет среди найденных процессов и получает идентификаторы процессов, которых нетeclipse
в их полных командных строкахxargs kill
убьет процессы.источник
pkill
решение, если бы оноpgrep/pkill
поддерживало регулярные выражения perl, которые вы используете на 2-м шаге выше. К сожалениюpgrep
/pkill
поддерживает только расширенные регулярные выражения (какegrep/grep -E
).pgrep
/pkill
поддерживал PCRE ..jps -m | grep -v eclipse | awk '{print $1}' | xargs -t kill
Используйте jps, чтобы убедиться, что вы ищете только команды java, а не все команды, которые имеют путь java.
источник
источник