OSX Terminal: как убить все процессы с тем же именем

Получение следующего вывода из этого:

ps aux | grep Python

Вывод:

user_name  84487   0.0  0.0        0      0   ??  Z    12:15PM   0:00.00 (Python)
user_name  84535   0.0  0.0        0      0   ??  Z    12:16PM   0:00.00 (Python)

Я хочу завершить все процессы Python, выполняемые в настоящее время на машине.

Ответ 1

используйте pkill с опцией -f.

pkill -f python

Если у вас нет предустановленного pkill (некоторые osx не...), попробуйте proctools.

Ответ 2

Если у вас нет pkill, вы можете попробовать следующее:

ps aux | grep python | grep -v grep | awk '{print $2}'

Если это дает вам идентификаторы PID, которые вы хотите убить, присоедините их к команде kill, подобной этой

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

Это говорит... убейте все PID, которые являются результатом команды в круглых скобках.

Ответ 3

killall python

Сделает трюк.

Ответ 4

@shx2: Спасибо за трюк! Вот шаги, чтобы заставить его работать:

Шаг 1:

cd /usr/bin

Шаг 2:

touch "pkill"

Шаг 3. С помощью выбранного текстового редактора откройте только что созданный файл:/usr/bin/pkill (сделайте это с помощью sudo или администратором). Скопируйте/вставьте это и сохраните:

for X in `ps acx | grep -i $1 | awk {'print $1'}`; do
  kill $X;
done

Шаг 3. Установите атрибут файла

sudo chmod 755 /usr/bin/pkill

Теперь вы готовы завершить любой процесс с помощью простого синтаксиса:

Например, чтобы завершить все процессы Python, откройте оболочку и введите:

pkill Python

Все процессы python должны быть удалены.

Ответ 5

@glenn: Ваша команда не отправляет pid из себя, чтобы убить, что приведет к ошибке "Нет такого процесса". Или я чего-то не хватает. Спасибо.

ps aux | awk '/firefox/{print $2}' | xargs kill kill 1541: Нет такого процесса