Судя по вашему вопросу, вам не сложно использовать pgrep и pkill, так что вот некоторые другие варианты, которые обычно используются.
1) Используйте killproc
от /etc/init.d/functions
или /lib/lsb/init-functions
(который когда-либо подходит для вашего распространения и версии Linux). Если вы пишете сценарий службы, вы уже можете включить этот файл, если в качестве примера использовали одну из других служб.
Usage: killproc [-p pidfile] [ -d delay] {program} [-signal]
Основное преимущество использования этого является то, что он посылает SIGTERM, ждет, чтобы увидеть, если процесс завершается и отправляет SIGKILL только в случае необходимости.
2) Вы также можете использовать секретный соус killproc, который должен найти идентификаторы процесса для уничтожения с использованием pidof
, который имеет опцию -o
для исключения конкретного процесса. Аргументом для -o
может быть $$
, текущий идентификатор процесса или %PPID
, который является специальной переменной, которую pidof интерпретирует как скрипт, вызывающий pidof. Наконец, если демон является скриптом, вам понадобится -x, поэтому вы пытаетесь убить скрипт по имени, а не убивать bash или python.
for pid in $(pidof -o %PPID -x progd); do
kill -TERM $pid
done
Вы можете увидеть пример этого в статье Bash: How to check if your script is already running
использование pgrep и петля затем убить? –
Я собирался это сделать, но задал вопрос здесь, если есть более простое решение. – kaspersky