Invoke interrupt from R code

后端 未结 2 1370
攒了一身酷
攒了一身酷 2021-02-15 13:49

I have a generic function to catch all exceptions included in my package logR::tryCatch2 defined as:

tryCatch2 <- function(expr){
    V=E=W=M=I=         


        
2条回答
  •  别跟我提以往
    2021-02-15 14:21

    I can propose a partial solution, which relies on the tools package.

    invokeInterrupt <- function() {
      require(tools)
      processId <- Sys.getpid() 
      pskill(processId, SIGINT)
    }
    

    However, be aware that throwing the interrupt signal (SIGINT) with pskill doesn't appear to be very robust. I ran a few tests by sending the exception and catching it with your function, like so:

    will_interrupt <- function() {
        Sys.sleep(3)
        invokeInterrupt()
        Sys.sleep(3)
    }
    
    r = tryCatch2(will_interrupt())
    

    On linux, this worked well when executed from the R commandline. On windows, the R commandline and R Gui did close when executing this code. There is worse: on both linux and windows, this code crashed Rstudio instantly...

    So, if your code is to be executed from the R commandline on Linux, this solution should be OK. Otherwise you might be out of luck...

提交回复
热议问题