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

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

Пример:

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 . Есть ли чистая команда, которая могла бы выполнить работу?

4 ответа4

2

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

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

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

Проверьте, прежде чем использовать kill -9

2

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

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

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 /... разделяются нулями, поэтому будьте внимательны при копировании /вставке

1

Пытаться

pkill start-cacheable.bash
0

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

killall <process name>

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .