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

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

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

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

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

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

  • Как убить все процессы, не имеющие определенного родительского процесса?
  • Убить процесс на определенном порту
  • Что делать, если «kill -9» не работает?
  • Как сделать сценарий инициализации «ОК», только когда все подпроцессы остановлены?
  • Баш | неудачный цикл
  • как перечислить все экземпляры приложения?
  • Патрулирование PIDs в kill не работает
  • Получить возвращаемое значение процесса с помощью PID
  • 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, по возрастанию он будет работать.

    Interesting Posts

    Нет разрешений?

    target / build CFLAGS mixup при перекрестном появлении из-за ошибки или моей глупости?

    Как снизить трафик видеоизображения в виде скайпа?

    Как не отображать вывод stdout запущенного процесса?

    как удаленно удалять nsupdate?

    Есть ли инструмент графического интерфейса для отображения информации о архиве с визуализацией соотношения?

    dpkg –configure -a не работает

    Причины групп по умолчанию и пользователей в Linux

    Как просто восстановить единственный файл только на удаленном диске?

    Могу ли я получить доступ к файлу терминала?

    grep для строки в нескольких файлах под tar и print wc -l

    Перенести «Списки контактов» от Thunderbird до Evolution

    Почему time / ident / daytime / comsat запускается после установки OpenBSD 5.2?

    Какие команды в virsh соответствуют кнопке «Force Off» в virt-manager?

    LMDE не загружается непосредственно после установки, но загружается с опции cd «загрузка с локального жесткого диска»,

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