Уничтожить несколько процессов по имени вместо pid

Уничтожить несколько процессов по имени вместо pid

У меня есть работа, которая заключается в создании 2–5 копий команды на Ubuntu Server 14.04.

Я пытаюсь найти самый простой (т.е. одну командную строку вместо скрипта, если возможно) для killвсех них. Настоящий трюк в том, что я используюАнсибльдля отправки специальных команд на десятки серверов, поэтому вызов каждого процесса занимает много времени.

Пример:

ps aux | grep bash 
user 1031 0.0 0.0  4444  652 ?      Ss  Aug15 0:00 /bin/sh -c /home/user/start-cacheable.bash
user 1032 0.0 0.1 12400 1432 ?      S   Aug15 0:00 /bin/bash /home/user/start-cacheable.bash
user 1327 0.0 0.3 12744 2254 tty1   S   Aug15 0:00 -bash

Теперь отсюда я бы побежал kill 1031 1032. Есть ли чистая команда, которая могла бы выполнить эту работу?

решение1

@jjlin ответ может сработать.

Но чтобы объяснить работу pgrep/pkillи killall:

киллалл ищетимена процессовтолько - это та часть, которая видна в/proc/<pid>/comm

pgrep/pkill по умолчанию делает то же самое, но также может искать совпадения в аргументах (-f), что позволяет ему сопоставлять/proc/<pid>/cmdline

По сути, по умолчанию ps -Aучитываются только строки, которые видны в .

пример:

process name (comm): sshd
full command/arguments (cmdline): /usr/sbin/sshd -f /etc/ssh/sshd_config

сейчас - kilall/pkil sshdбудет работать (намеренные опечатки, не делайте так ;)
но killall /usr/sbin/sshdбудетНе работапоскольку путь не является частью имени процесса,
вы можете проверить его с помощью pgrep -lf sshd_config(например, pkill -f)

Затем следует учесть еще несколько моментов. KillallВозможно, совпадение происходит только по первым 15 байтам имени команды (см. killall -e), нужны ли регулярные выражения или вы хотите использовать группы процессов и т. д.

примечание: файлы /proc/... имеют нулевой разделитель, поэтому будьте осторожны при копировании/вставке

решение2

Вы можете это использовать.

ps aux | grep <your keyword> | grep -v grep | awk  '{print $2}' | xargs kill -9

Выводит список соответствующих процессов, отфильтровывает сам процесс grep, извлекает PID, передает его kill -9.

Тест перед использованием kill -9

решение3

Пытаться

pkill start-cacheable.bash

решение4

Вы можете использовать

killall <process name>

Связанный контент