How to properly close a chromote session?

224 Views Asked by At

Using the Linux command top I see there are no processes named, "chrome".

Then I do:

library("chromote")
   
b <- ChromoteSession$new()

and see eight processes called chrome.

Now I close the window/tab:

b$close()
# [1] TRUE

but the eight processes remain.

I think I want to shutdown the browser process. I tried:

b$parent$close()

But this results in the error:

# Error in self$send_command(msg, callback = callback_, error = error_,  : 
#                              Chromote object is closed.

How do I properly close a Chromote session, created by ChromoteSession$new() so that there are no chrome processes using up memory?


Trying @margusl's solution:

b <- ChromoteSession$new()

# close session
p <- b$parent
p_browser <- b$parent$get_browser()
p_browser$close()

removes all chrome processes but has this error message. Is this a concern?

[1] TRUE
[2023-01-22 18:33:15] [error] handle_read_frame error: websocketpp.transport:7 (End of File)
1

There are 1 best solutions below

2
On BEST ANSWER

Same behaviour in Windows, though Browser$close() apparently kills chrome processes. Getter for browser instance is b$parent$get_browser().

library(chromote)

# Windows tasklist
chrome_tasks <- function(){ 
  system('tasklist /fo csv',intern=TRUE) |> 
    read.csv(text = _) |> 
    subset(Image.Name == "chrome.exe")
}

# chrome tasks before initiating the session:
chrome_tasks()
#> [1] Image.Name   PID          Session.Name Session.     Mem.Usage   
#> <0 rows> (or 0-length row.names)

# new session:
b <- ChromoteSession$new()
p <- b$parent
p_browser <- b$parent$get_browser()
(ct_session <- chrome_tasks())
#>     Image.Name   PID Session.Name Session. Mem.Usage
#> 279 chrome.exe  9792      Console        1  39 600 K
#> 281 chrome.exe 25336      Console        1   8 380 K
#> 282 chrome.exe 23696      Console        1  36 008 K
#> 283 chrome.exe 16696      Console        1  19 612 K
#> 284 chrome.exe 21244      Console        1  34 916 K
#> 285 chrome.exe 20292      Console        1  36 644 K

# session close()
b$close()
#> [1] TRUE
(ct_bclose <- chrome_tasks())
#>     Image.Name   PID Session.Name Session. Mem.Usage
#> 279 chrome.exe  9792      Console        1  40 392 K
#> 281 chrome.exe 25336      Console        1   8 404 K
#> 282 chrome.exe 23696      Console        1  31 212 K
#> 283 chrome.exe 16696      Console        1  19 676 K
#> 284 chrome.exe 21244      Console        1  34 916 K
# closed: 
setdiff(ct_session$PID, ct_bclose$PID)
#> [1] 20292

# parent close()
p$close()
#> Error in self$send_command(msg, callback = callback_, error = error_, : Chromote object is closed.
(ct_pclose <- chrome_tasks())
#>     Image.Name   PID Session.Name Session. Mem.Usage
#> 279 chrome.exe  9792      Console        1  40 396 K
#> 281 chrome.exe 25336      Console        1   8 404 K
#> 282 chrome.exe 23696      Console        1  31 212 K
#> 283 chrome.exe 16696      Console        1  19 676 K
#> 284 chrome.exe 21244      Console        1  34 916 K
# closed :
setdiff(ct_bclose$PID, ct_pclose$PID)
#> integer(0)

# parent$get_browser() close()
p_browser$close()
#> [1] TRUE
(ct_pbrowser_close <- chrome_tasks())
#> [1] Image.Name   PID          Session.Name Session.     Mem.Usage   
#> <0 rows> (or 0-length row.names)
# closed :
setdiff(ct_pclose$PID, ct_pbrowser_close$PID)
#> [1]  9792 25336 23696 16696 21244

Created on 2023-01-22 with reprex v2.0.2