Как убить все процессы Python, кроме одного из Bash

11

Как я могу убить из Bash все процессы Python, кроме одного сценария Python. (Я знаю его имя, но его pid иногда можно изменить).

Мне нужно что-то вроде, pkill -f "python"но с исключением конкретного сценария Python.

Пожалуйста, порекомендуйте.

user370717
источник

Ответы:

13

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

Обновление: пошаговое объяснение в соответствии с просьбой в комментариях

  • ps aux |grep python- показать все процессы, которые соответствуют pythonшаблону
  • grep -v 'pattern_of_process_you_dont_want_to_kill' - исключить процесс, который вы не хотите убивать
  • awk '{print $2}' - показать второе поле вывода, это PID.
  • xargs kill- применить killкоманду к каждому входному аргументу (PID).

Если вы не знакомы с xargsкомандой, я бы посоветовал вам не беспокоиться, если вы не поняли это сразу. Впервые это может показаться довольно хитрым. Я опубликовал очень простой пример его использования, вы можете Google для более.

user1700494
источник
1
Отлично, но не могли бы вы объяснить, как это работает, например, что такое awk '{print $ 2}' и xargs kill?
user370717
awk '{print $2}' - печатает второе поле psвывода, в текущем случае это так PID. xargsприменяет killкоманду к каждомуPID
user1700494
1
Хорошо бы добавить это в комментарий, но я бы предпочел проголосовать за ваш ответ после того, как этот хорошо отформатированный комментарий был включен в ваш ответ.
цыплята