how to run an executable file and then later kill or terminate the same process with R in Windows

前端 未结 3 810
感情败类
感情败类 2020-12-10 07:02

let\'s say i have an executable file stored in c:\\my directory\\my file.exe that i would like to initiate near the beginning of my R script, and then terminate

3条回答
  •  忘掉有多难
    2020-12-10 07:49

    drawing on the other two answers received, this technique seems like a reasonable way to accomplish the stated goal..

    # specify executable file
    exe.file <- "C:\\Users\\AnthonyD\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe"
    
    # capture the result of a `tasklist` system call
    before.win.tasklist <- system2( 'tasklist' , stdout = TRUE )
    
    # store all pids before running the process
    before.pids <- substr( before.win.tasklist[ -(1:3) ] , 27 , 35 )
    
    # run the process
    shell.exec( exe.file )
    
    # capture the result of a `tasklist` system call
    after.win.tasklist <- system2( 'tasklist' , stdout = TRUE )
    
    # store all tasks after running the process
    after.tasks <- substr( after.win.tasklist[ -(1:3) ] , 1 , 25 )
    
    # store all pids after running the process
    after.pids <- substr( after.win.tasklist[ -(1:3) ] , 27 , 35 )
    
    # store the number in the task list containing the PIDs you've just initiated
    initiated.pid.positions <- which( !( after.pids %in% before.pids ) )
    
    # remove whitespace
    after.tasks <- gsub( " " , "" , after.tasks )
    
    # find the pid position that matches the executable file name
    correct.pid.position <- 
        intersect(
            which( after.tasks %in% basename( exe.file ) ) ,
            initiated.pid.positions 
        )
    
    
    # remove whitespace
    correct.pid <- gsub( " " , "" , after.pids[ correct.pid.position ] )
    
    # write the taskkill command line
    taskkill.cmd <- paste( "taskkill" , "/PID" , correct.pid )
    
    # wait thirty seconds (so the program fully loads)
    Sys.sleep( 30 )
    
    # kill the same process that was loaded
    system( taskkill.cmd )
    

提交回复
热议问题