Как убить только если процесс запущен?

В настоящее время я использую такую ​​строку в моем файле сценария sh:

kill `ps aux | grep -F 'myServer' | grep -v -F 'grep' | awk '{ print $2 }'` 

Но мне интересно, как ее вызвать, только если процесс (myServer здесь) запущен?

11
задан 31 January 2012 в 16:35

8 ответов

Вы можете убить процессы по имени, используя pkill или killall, проверьте их справочные страницы.

0
ответ дан 31 January 2012 в 16:35

попробуйте использовать:

sudo kill `pidof process_name`

где имя_процесса - это имя процесса, который вы хотите уничтожить. Что в этом хорошего, так это то, что pidof будет перечислять pid всех процессов, соответствующих данному имени. Так как kill принимает несколько pid, он убивает их всех за один каприз.

Дайте мне знать, если это поможет.

0
ответ дан 31 January 2012 в 16:35

Проверьте, существует ли процесс с pidof. Если это так, убейте его:

(! pidof process_name) || sudo kill -9 $(pidof process_name)

Код выхода всегда равен 0 после выполнения вышеуказанной команды.

0
ответ дан 31 January 2012 в 16:35

Я бы использовал:

ps x --no-header -o pid,cmd | awk '!/awk/&&/myServer/{print $1}' | xargs -r kill

xargs -r приказывает запустить kill только при наличии ввода. ps --no-header -eo pid,cmd выводит выходные данные в лучший формат для анализа.

0
ответ дан 31 January 2012 в 16:35

Я обычно просто использую pgrep и pkill

if pgrep myServer; then pkill myServer; fi
0
ответ дан 31 January 2012 в 16:35

Немного другой подход будет выглядеть примерно так:

killall PROCESS || echo "Process was not running."

Это позволит избежать кода ошибки 1, возвращаемого командой killall, если процесс не существует. Часть echo вступит в действие, только если killall вернет 1, а сама вернет 0 (успех).

0
ответ дан 31 January 2012 в 16:35

Небольшой скрипт, который я создал с помощью R & D. Надеюсь, вам понравится

#!/bin/bash

echo " Enter the process name:"
read $proc_name
if pgrep $proc_name
then
echo " $proc_name running "
pkill $proc_name
echo "$proc_name  got killed"
else
echo " $proc_name is not running/stopped "
fi

, сохраните его под каким-нибудь именем, например, script.sh, затем

chmod +x script.sh
./script.sh

, затем дайте имя процессу.

Примечание: я много раз пробовал с этим, и это нормально.

0
ответ дан 31 January 2012 в 16:35

Используйте pkill с опцией -f

pkill -f myServer

Опция -f - это шаблон, который обычно сопоставляется с именем процесса.

0
ответ дан 6 March 2020 в 19:19

Другие вопросы по тегам:

Похожие вопросы: