
У меня есть работа, которая заключается в создании 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>