Изящный способ убить процесс

После того, как мой скрипт bash выполняется с сервером selenium, сценарий убивает его следующим образом:

kill `ps -ef | grep selenium | awk '{ print $2 }'` 

В то время как это работает, и он убивает сценарий селена, он также пытается убить процесс grep selenium Таким образом, к тому моменту, когда номер процесса вернется к команде kill, процесс исчезнет, ​​поэтому он завершает создание сообщения об ошибке. (Другими словами: он заканчивает убийство двух процессов, один из которых является реальным сервером селена, другой – мимолетный процесс, который является побочным эффектом того, как я делаю эту команду.)

Есть ли более грациозный способ убить процесс, который не имеет этого непреднамеренного побочного эффекта?

(FWIW одна идея у меня: этот же скрипт запускает селен раньше в скрипте, поэтому, возможно, если бы я мог захватить PID, когда я запускаю селен, я мог бы просто сохранить это и убить его напрямую, вместо grepping for Идентификатор процесса. Проблема в том, что я не знаю, как получить этот PID, как использовать переменную, чтобы сохранить ее и как ссылаться на нее позже в скрипте. Но это лучший способ сделать это?)

  • Почему системный вызов UNIX убивает имя 'kill'?
  • Как убить задачу, которая не может быть убита (не прерывается?)
  • убийство процесса в одной строке
  • Как закрыть все процессы без перезагрузки машины?
  • Убивать работу
  • как убить процессы dovecot
  • pkill не может убивать процессы с родительским идентификатором процесса 1
  • Сделать процесс unkillable в Linux
  • 5 Solutions collect form web for “Изящный способ убить процесс”

    Попробуйте использовать pkill selenium если ни это, ни одно из других не работает, вы можете продолжать использовать ваш метод с другой последовательностью труб, такой как

     kill `ps -ef|grep -i selenium| grep -v grep| awk '{print $2}'` 

    Попробуйте команду pgrep , которая выведет PID интересующей вас команды.

     pgrep selenium 

    Чтобы фактически убить процесс, используйте команду companion pkill .

     pkill selenium 

    Попробуйте использовать grep [s]elenium . Это не нашло бы процесс grep.

    Команда killall не упоминалась, и я считаю, что это полезное дополнение к репертуару.

     $ killall selenium 

    Вы также можете использовать параметр -r regex чтобы указать регулярное выражение, соответствующее имени процесса, и даже значение времени:

     $ killall -o 5m selenium 

    Убивает все процессы селена старше 5 минут.

    Используйте переключатель -m 1 с командой grep, чтобы извлечь только первый найденный процесс. Пока вы сортируете свои процессы с помощью PID, по возрастанию он будет работать.

    Linux и Unix - лучшая ОС в мире.