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

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

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

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

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

(FWIW одна идея у меня: этот же скрипт запускает селен раньше в скрипте, поэтому, возможно, если бы я мог захватить PID, когда я запускаю селен, я мог бы просто сохранить это и убить его напрямую, вместо grepping for Идентификатор процесса. Проблема в том, что я не знаю, как получить этот 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, по возрастанию он будет работать.

  • Патрулирование PIDs в kill не работает
  • Убивать работу
  • Как убить процесс, который говорит «Операция не разрешена» при попытке?
  • Убить процесс чисто
  • Единственный случай - это бесперебойный сон?
  • Как убить каскад в Linux?
  • Освежающий меньше на лету
  • Как убить упрямый процесс
  • Может ли скрипт работать даже после его смерти?
  • Как закрыть все процессы без перезагрузки машины?
  • Как убить все процессы с использованием данного GPU?
  • Interesting Posts

    шкала bc: Как избежать округления? (Рассчитайте небольшую биномиальную вероятность)

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

    почему новый pid меньше старых?

    numlock при запуске на linux mint 18.2

    Поиск в файле, но не в подкаталоги

    Печать непревзойденных шаблонов с использованием grep с шаблонами из файла

    xrandr rotate left right faild

    Диск с жестким диском с жестким ковшом с использованием ядра linux

    Не удалось подключить Ethernet через ключ

    Требуется ли сделать отдельный / загрузочный раздел для установки нескольких linux os?

    Как я могу связываться с сокером Unix сокета через оболочку на Debian Squeeze?

    Настройка выполнения команд xfce4-session-logout

    Соответствующий дистрибутив 2015 года для нетбука 2008 года?

    Как копировать все файлы, которые я копирую, прежде чем их перезаписать?

    Как я могу передавать данные в программу, которая ожидает чтения данных из файла, который указан в качестве аргумента?

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