В даний час я використовую такий рядок у своєму скриптовому файлі 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 відобразить список усіх процесів, що відповідають заданому імені. Оскільки kill приймає декілька Pid-кодів, вони вбиватимуть усіх за один примху.
Повідомте мене, якщо це допомагає.
kill `pidof process_name
. Якщо він поверне порожній список, пропустіть виклик вбивства.
Маленький сценарій, який я створив з дослідженнями та розробками. Сподіваюся, вам сподобається
#!/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
які робити точно так само, як ви намагаєтесь зробити, але з меншим типом (і, мабуть, і іншими іншими перевагами).