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

После того, как мой скрипт 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, по возрастанию он будет работать.

  • можно заморозить процесс в Linux и перезагрузить или выключить компьютер. Затем продолжайте процесс, который был заморожен?
  • Почему я не мог убить процесс NOHUP?
  • Любой способ перезапустить машину Linux через SSH, если корневая файловая система не работает?
  • Как убить процесс, дающий ему несколько секунд, прежде чем совершить вынужденное убийство?
  • pkill не может убивать процессы с родительским идентификатором процесса 1
  • Убивать процесс, когда ПИД постоянно меняется
  • Как убить задачу, которая не может быть убита (не прерывается?)
  • Почему команда killall убивает только один экземпляр процесса?
  • killall не работает, если я вызываю его из скрипта
  • Как закрыть все процессы без перезагрузки машины?
  • Что делать, если «kill -9» не работает?
  • Interesting Posts

    Apache vs lighthttpd: разные типы поведения с типом mime

    (g) vim – NerdTree и тегбар над друг другом слева до редактируемого файла?

    Дисплей сна: графическая карта «сон»?

    Удалить все inodes BESIDES один под всеми экземплярами dir0 / dir1 UNDER var / www / html, в одной команде

    Как отключить переключатель рабочего пространства мыши в Cinnamon?

    Почему комбинация tail + grep + cut не работает?

    Не удается переслать X11 больше с сервера ssh

    Клавиши управления и увеличения / уменьшения в терминале для использования emacs

    SIOCSIFADDR: Файл существует после обновления ядра

    cifs-mount с несколькими общими папками на сервере Windows

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

    Каково имя интерфейса для USB-модема?

    Можно ли использовать трубку вместо exec in – find / -name ".txt" -exec cp {} / junk \;

    Как я могу извлечь годы рождения от даты рождения в Linux

    Монтирование монтирования Linux в окнах (без ftp)?

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