我在centos镜像中启用了一个jar包,使用selenium chromedriver获取浏览器链接,使用完后,我使用了close()方法和quit()方法,但是程序接受后,仍然有许多 chrome 僵尸进程。
chromedrive 版本 99
centos8
硒4.7.2
我也曾经获取Chromedrive的pid来杀掉它,但是没用
...
WebDriver driver = null;
List<Integer> pids = new ArrayList<>();
try {
driver = new ChromeDriver(service, desiredCapabilities);
Integer port = service.getUrl().getPort();
pids = GetChromePidFromPort(port);
log.info("detected chrome process id " + pids);
driver.manage().window().maximize();
driver.manage().window().setSize(new Dimension(1920, 1080));
driver.get(url);
log.info("drive task is done, sleep :" + duration + " ms");
Thread.sleep(duration);
return true;
} catch (InterruptedException | IOException e) {
log.info("chrome download png error");
e.printStackTrace();
} finally {
if (driver != null) {
driver.close();
driver.quit();
if (!pids.isEmpty()) {
killPid(pids);
}
}
}
private static List<Integer> GetChromePidFromPort(Integer port) throws IOException {
List<Integer> pidList = new ArrayList<>();
Process process = Runtime.getRuntime().exec("lsof -i:" + port);
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
if (line.contains("chrome")) {
int pid = Integer.parseInt(line.split("\\s+")[1]);
System.out.println("PID: " + pid);
pidList.add(pid);
}
}
return pidList;
}
完美,通过将“init: true”命令添加到我的 docker-compose.yml 中,这可以消除所有僵尸进程,而无需通过 docker run。请参阅https://docs.docker.com/compose/compose-file/compose-file-v2/#init