Как убить все процессы, исключая некоторые Python
У меня запущено несколько процессов:
PID TTY TIME CMD
11491 pts/12 00:00:00 bash
12005 pts/12 00:00:00 Xfce4
13168 pts/12 00:00:01 vncserver
13179 pts/12 00:02:21 nano
[И еще несколько процессов]
Мне нужно остановить все процессы, кроме vncserver и bash, а так же кроме процесса самого python скрипта. Как такое реализовать на linux?
Ответы (1 шт):
в стандартной поставке бывают команды pgrep и pkill (если нет, устанавливайте пакет procps)
теперь настраиваемся. Используем pgrep, что бы отфильтровать нужные процессы
pgrep -l vncserver\|bash
-l дает возможность увидеть не только pid, но и имена. Теперь, аккуартненько формируем список процессов на выживание. потом добавим -v, которая инвертирует условие. Хотя иногда лучше наоборот - сформировать список того, что нужно удалить.
ещё есть ключик -u "$(whoami)" который заставляет pgrep работать как ps без параметром. к сожалению, с -v оно работает не совсем так, как ожидается (показывает как раз все процессы, которые не пользователя...).
когда список будет готов, то вместо pgrep используем pkill, который и сделает черное дело.
но можно пойти дальше. у меня родился вот такой скрипт
ps | grep -v 'vnc\|bash' | cut -f 1 -d ' ' | xargs kill -9
только вначале лучше его написать вот так
ps | grep -v 'vnc\|bash'
что бы посмотреть, что же по факту будет убиваться.
Потом вот так
ps | grep -v 'vnc\|bash' | cut -f 1 -d ' '
что бы убедится, что там правильные pid
А только потом уже добавить все остальное - kill c нужными параметрами.