В настоящее время я использую такую строку в моем файле сценария sh:
kill `ps aux | grep -F 'myServer' | grep -v -F 'grep' | awk '{ print $2 }'`
Но мне интересно, как это назвать, только если процесс ( myServer
здесь) запущен?
В настоящее время я использую такую строку в моем файле сценария sh:
kill `ps aux | grep -F 'myServer' | grep -v -F 'grep' | awk '{ print $2 }'`
Но мне интересно, как это назвать, только если процесс ( myServer
здесь) запущен?
Ответы:
Я обычно просто использую pgrep и pkill
if pgrep myServer; then pkill myServer; fi
pkill myServer
или killall -q myServer
? Там нет недостатка в попытке убить несуществующие процессы.
|| true
тогда.
if ! killall -q myServer; then echo ERROR; fi
?
Немного другой подход был бы примерно таким:
killall PROCESS || echo "Process was not running."
Это позволит избежать 1
возврата кода ошибки из killall
команды, если процесс не существует. echo
Часть будет только в действие, если killall
возвращается 1
, в то время как сам вернется 0
(успех).
killall -q
лучше
killall -q
поддерживается не всеми версиями Unix, MacOS Catalina все еще не имеет его.
попробуйте использовать:
sudo kill `pidof process_name`
где имя_процесса - это имя процесса, который вы хотите уничтожить. Что в этом хорошего, так это то, что pidof будет перечислять pid всех процессов, соответствующих данному имени. Поскольку kill принимает несколько PID, он будет убивать всех из них в один каприз.
Позвольте мне знать, если это помогает.
kill `pidof process_name
. Если он возвращает пустой список, пропустите вызов kill.
Небольшой сценарий, который я создал с 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
Затем дайте имя вашему процессу.
Примечание: я пробовал много раз с этим, и это нормально.
Проверьте, существует ли процесс с pidof
. Если это так, убейте его:
(! pidof process_name) || sudo kill -9 $(pidof process_name)
Код выхода всегда равен 0 после выполнения вышеуказанной команды.
kill
только, когда процесс запущен, потому что между тестом и вызовом есть условие состязанияkill
(возможно, процесс остановился по другой причине за это короткое время). Вы должны использоватьpkill
илиkillall
делать то же самое, что вы пытаетесь сделать, но с меньшим количеством для ввода (и, вероятно, некоторые другие преимущества).