Как убить все процессы с заданным частичным именем?
Я хочу убить все процессы, которые я получаю:
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
Если вам нужно больше гибкости в выборе процессов, используйте
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}')"
Вы не должны зацикливаться.
Вы можете использовать следующую команду для:
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
Я взял ответ Ойгена Рика и работал с ним. Мой код добавляет следующее:
ps ax
включает grep, поэтому я исключил его с помощьюgrep -Eiv 'grep'
- Добавлено несколько "если" и "эхо", чтобы сделать его удобочитаемым.
Я создал файл, назвал его 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