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

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

ps aux | grep my_pattern

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

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

pkill my_pattern

10 ответов

Решение

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

pkill -f my_pattern

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

Один лайнер:

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

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

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

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

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

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

ps aux | grep -c myProcessName 

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

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

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

kill -9 $(ps aux | grep -e myProcessName | awk '{ print $2 }') 

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

killall -r my_pattern

Если вы судите pkill -f PATTERN Слишком опасно, я написал ezkill bash-скрипт, который подсказывает вам, какие процессы выбрать среди тех, которые соответствуют ШАБЛОНУ, который вы хотите уничтожить.

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

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

Если вы не хотите испытывать головную боль при поиске идентификатора процесса, используйте regexp для уничтожения процесса по имени. Например, чтобы убить Chrome, следующий код сделает свое дело.

killall -r --regexp chrome

Нашел лучший способ сделать это для сервера, который не поддерживает 'pkill'

"kill -9 $ (ps ax | grep My_pattern | fgrep -v grep | awk '{print $ 1}')"

Вы не должны зацикливаться.

Это способ:

kill -9 $(pgrep -d' ' -f chrome)

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

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

или же

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

Меня устраивает.

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

 pkill `pidof myprocess`

пример:

# kill all java processes
pkill `pidof java`

Это лучше и безопаснее в использовании pgrep -f с kill, или просто pkill -f, grep ИНГ ps выход может пойти не так.

В отличие от использования ps | grep с помощью которого вам нужно отфильтровать строку grep, добавив | grep -v или используя трюки с шаблонами, pgrep просто не выберусь сам по себе.

Кроме того, если ваш шаблон появится в ps "s UID / USER, SDATE / START или любой другой столбец, вы получите нежелательные процессы в выводе и убьете их, pgrep + pkill не страдать от этого недостатка.

также я обнаружил, что killall -r / -regexp не работал с моим регулярным выражением.

pkill -f "^python3 path/to/my_script$"

man pkill

Я взял ответ Ойгена Рика и работал с ним. Мой код добавляет следующее:

  1. ps ax включает grep, поэтому я исключил его с помощью grep -Eiv 'grep'
  2. Добавлено несколько "если" и "эхо", чтобы сделать его удобочитаемым.

Я создал файл, назвал его killserver, вот оно:

#!/bin/bash
PROCESS_TO_KILL=bin/node
PROCESS_LIST=`ps ax | grep -Ei ${PROCESS_TO_KILL} | grep -Eiv 'grep' | awk ' { print $1;}'`
KILLED=
for KILLPID in $PROCESS_LIST; do
  if [ ! -z $KILLPID ];then
    kill -9 $KILLPID
    echo "Killed PID ${KILLPID}"
    KILLED=yes
  fi
done

if [ -z $KILLED ];then
    echo "Didn't kill anything"
fi

Полученные результаты

➜  myapp git:(master) bash killserver
Killed PID 3358
Killed PID 3382
Killed
➜  myapp git:(master) bash killserver
Didn't kill anything
Другие вопросы по тегам