Как убить все процессы с заданным частичным именем?

337

Я хочу убить все процессы, которые получаю:

ps aux | grep my_pattern

Как это сделать?

Это не работает:

pkill my_pattern
  • 7
    Является ли my_pattern просто подстрокой имени или содержит специальные символы регулярного выражения?
Теги:
posix

9 ответов

747
Лучший ответ

Используйте pkill -f, который соответствует шаблону для любой части командной строки

pkill -f my_pattern
  • 8
    +1. pkill очень полезен
  • 6
    @Jayan: это также довольно неизбирательное убийство. Это удивительно легко неправильно ...
Показать ещё 18 комментариев
75

Убить все процессы, соответствующие строке "myProcessName":

Один вкладыш:

ps -ef | grep myProcessName | grep -v grep | awk '{print $2}' | xargs kill -9

Источник: http://www.commandlinefu.com/commands/view/1138/ps-ef-grep-process-grep-v-grep-awk-print-2-xargs-kill-9

  • 15
    Это выдаст ошибку, если не найден процесс, соответствующий имени. Вы можете использовать ps -ef | grep myProcessName | grep -v grep | awk '{print $2}' | xargs -r kill -9 чтобы xargs не выполнял команду, если не задано никаких аргументов.
  • 2
    Просто небольшая модификация, возможно, лучше процитировать имя процесса: ps -ef | grep 'myProcessName' | grep -v grep | awk '{print $2}' | xargs -r kill -9 Без кавычек только один из моих фоновых процессов был убит при первом запуске. Запуск его снова убил остальных.
42

Если вам нужна большая гибкость при выборе процессов, используйте

for KILLPID in `ps ax | grep 'my_pattern' | awk ' { print $1;}'`; do 
  kill -9 $KILLPID;
done

Вы можете использовать grep -e и т.д.

  • 2
    -1 Вам не нужен цикл, вы можете просто kill -9 `ps ax | awk '[m]y_pattern { print $1 }'` (обратите внимание также на рефакторинг; см. также мой комментарий к ответу @ synthesizerpatel).
  • 8
    Не @tripleee Нет проблем с downvote, но ты понимаешь, что OQ был «Я хочу , чтобы убить все процессы , которые я получаю от: пс Окс | Grep my_pattern», который я dutyfully принял.
Показать ещё 3 комментария
9

вы можете использовать следующую команду для перечисления процесса

ps aux | grep -c myProcessName 

если вам нужно проверить счетчик этого процесса, запустите

ps aux | grep -c myProcessName |grep -v grep 

после чего вы можете убить процесс, используя

kill -9 $(ps aux | grep -e myProcessName | awk '{ print $2 }') 
  • 0
    Вы можете использовать следующую команду для вывода списка процессов ps aux | grep -c myProcessName, если вам нужно проверить счетчик этого процесса, затем запустить ps aux | grep -c myProcessName | grep -v grep, после чего вы можете завершить процесс, используя kill -9 $ (ps aux | grep -e myProcessName | awk '{print $ 2}')
4

Если вы судите pkill -f PATTERN слишком опасно, я написал ezkill a bash script, который подскажет вам выберите, какие процессы находятся между теми, которые соответствуют PATTERN, которые вы хотите убить.

2

Также вы можете использовать killall -r my_pattern. -r Интерпретировать шаблон имени процесса как расширенное регулярное выражение.

killall -r my_pattern
1

Звучит плохо?

 pkill `pidof myprocess`

Пример:

# kill all java processes
pkill `pidof java`
0

Вы можете использовать следующую команду для

kill -9 $(ps aux | grep 'process' | grep -v 'grep' | awk '{print $2}')
0

Вы можете использовать следующую команду для:

ps -ef | grep -i myprocess | awk {'print $2'} | xargs kill -9

или

ps -aux | grep -i myprocess | awk {'print $2'} | xargs kill -9

Это работает для меня.

  • 1
    Добро пожаловать в StackOverflow. Пожалуйста, используйте 4 пробела или табуляцию для строк кода, чтобы они были отформатированы как блоки кода. С наилучшими пожеланиями

Ещё вопросы

Сообщество Overcoder
Наверх
Меню