Перейти к содержимому

Фотография

Как получить PID процесса запущенного chromedriver?

PID Java Selenium chromedriver

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 2

#1 the0

the0

    Новый участник

  • Members
  • Pip
  • 47 сообщений
  • ФИО:Сергей


Отправлено 07 ноября 2016 - 17:27

Добрый день!

Столкнулся с такой проблемой, что на CentOS во время прогона, хром закрывается некорректно, о чем свидетельствует сообщение в правом верхнем углу браузера при следующем его запуске для следующего теста. В какой-то момент, после очередного теста, браузер закрывается, а вот процесс остается и по этой причине прогон зависает надолго (около 3 часов), после длинной паузы появляется ошибка:
 

Nov 02, 2016 9:28:03 PM org.openqa.selenium.os.UnixProcess destroy
INFO: Command failed to close cleanly. Destroying forcefully (v2). [/usr/local/share/chromedriver, --port=9961][ {}]
Nov 02, 2016 9:28:04 PM org.openqa.selenium.os.UnixProcess destroy
SEVERE: Unable to kill process with PID 16197
 

Выяснилось это опытным путем, поскольку после того, как процесс убивается вручную, тесты продолжают запускаться дальше, пока вновь не произойдет такая штука. Тесты завершаются командой webDriver.quit(); Все тулзы, входящие в инфраструктуру тестов были обновлены до самых актуальных версий, проблема сохранилась.

Появилась идея вставить костыль, такой как ручной kill процесса, в случае, если после webDriver.quit(); он все еще запущен, однако в этом случае нужно получить PID процесса.
Собственно вопрос, как получить PID процесса только что запущенного chromedriver'а?

Может кто сталкивался с такой задачей, буду очень признателен за помощь.
 


  • 0

Основательный подход


#2 Snap

Snap

    Специалист

  • Members
  • PipPipPipPipPip
  • 980 сообщений
  • ФИО:Роман
  • Город:Москва


Отправлено 07 ноября 2016 - 17:48

У меня на Windows была такая же проблема. Если не изменяет память, то с PID у меня не вышло и я просто стал "убивать" браузер плюс сам процесс автотестов (екзешник).


  • 0

#3 checo

checo

    Опытный участник

  • Members
  • PipPipPipPip
  • 400 сообщений
  • Город:Н.Новгород

Отправлено 10 ноября 2016 - 20:47

  1. Буду предполагать, что надо убить единственный хром. Или же все, оставшиеся на машине. Как убить конкретный chromedriver, если запущено несколько - не знаю. Они все запускаются от одного процесса java, и какой запущен в данном потоке - трудно сказать. (Хотя, теоретически, можно при запуске отловить, какой порт он слушает, и потом пропарсить вывод "ps -P <pid>". Но это уже ухищрения, которые, м.б., в данном случае и не нужны.)
  2. Я так и не понял: убивать надо chrome или chromedriver. Что важно: убиваю chromedriver - процессы chrome останутся висеть, только перепривязываются к оболочке. Поэтому надо начинать с них. А драйвер, может быть, и сам закроется.
  3. Понятно, что самое простое решение - глобальная зачистка: 
    Runtime.getRuntime.exec("killall chrome");
  4. Если нужно чуть поювелирнее, например, чтоб не прибить свой рабочий браузер, можно выцепить только те процессы, которые запущены из-под chromedriver. Только делать это надо до driver.quit(), а то потом они будут обычными системными процессами, и уже точно не определишь, какой откуда взялся.

    Runtime.getRuntime().exec("for drv in $(pgrep chromedriver);do for p in $(pgrep -P $drv);do kill -KILL $p;done;done");

  • 0



Темы с аналогичным тегами PID, Java, Selenium, chromedriver

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных