Раздел вопрос-ответ Как удалить процессы в linux по паттерну?

Как можно завершить несколько процессов в linux без указания pid для каждого? Т.е. убить процессы по имени процесса? Или убить по заданному паттерну? 

Например, псевдо bash код: kill 'router=brute_force'

ps axu грепнуть процессы, чтобы убить процессы

Красным на скриншоте выделены pid процессов, которые нужно убить. Хотелось бы убить процессы одной командой, а не указывать pid каждого kill 3645 5980 15086

share

2 ответа

Чтобы убить процессы по паттерну, воспользоваться командой pkill -f:

pkill -f my_pattern

-f, --full

              The pattern is normally only matched against the process name.  When -f is set, the full command line is used.

Флаг -f говорит о том, что процессы ищутся по совпадению по всей командной строке, а не только по имени процесса. Команды, чтобы узнать, какие процессы работают в системе.

Если для команды pkill не хватает прав:

pkill: killing pid 32390 failed: Operation not permitted

То делаем под sudo:

sudo pkill -f pattern

Примеры, как убивать процессы по регулярному выражению:

sudo pkill -f "php-fpm"    #убить все php-fpm процессы
sudo pkill -f "router=brute_force"    #убить все процессы, где в имени есть router=brute_force

 

Добавить комментарий
    как минимум 5 символов

    Ещё один вариант как убить процессы по имени процесса или паттерну:

    sudo kill $(pgrep -f part_of_process_name)

    Например, чтобы убить всех воркеров на сервере, я делаю следующим образом. Все воркеры запускаются через скрипт cli.php.

    sudo kill $(pgrep -f cli.php)

    Линукс прибить процессы по паттерну (части имени)

    Вариант с pkill -f почему то иногда убивает не все процессы (несколько раз нужно было запускать команду). Именно по этому обычно применяю этот вариант - и с ним процессы прибивались с первого раза.

    Добавить комментарий
      как минимум 5 символов

      icon Вход в систему

      зарегистрироваться