java - Call Runtime.getRuntime.exec(commands) twice on the same Process object -


i have 2 different commands (on external exe file) represented 2 string array command1 , command2. want run 2 sequentially within same thread. specific, first command executed 10 minutes. if takes longer time, terminate , run second command. here doing.

public class myrunnable implements runnable {     private process proc;     private string[] command1;     private string[] command2;      public myrunnable (string[] command1, string[] command2) {         this.command1 = command1;         this.command2 = command2;         }      public void run() {         try {             proc = runtime.getruntime().exec(command1);              streamgobbler errorgobbler = new streamgobbler(proc.geterrorstream(), "error");             streamgobbler outputgobbler = new streamgobbler(proc.getinputstream(), "output");              errorgobbler.start();             outputgobbler.start();              exitcode = proc.waitfor(10, timeunit.minutes);             if (exitcode)                 system.out.println("model " + modelpath + ": successfully!");             else {                 system.out.println("model " + modelpath + ": timed out!");                 proc = runtime.getruntime().exec(command2);                  streamgobbler errorgobbler1 = new streamgobbler(proc.geterrorstream(), "error");                 streamgobbler outputgobbler1 = new streamgobbler(proc.getinputstream(), "output");                  errorgobbler1.start();                 outputgobbler1.start();                  proc.waitfor(10, timeunit.minutes);             }                      } catch (interruptedexception e) {             e.printstacktrace();         } catch (ioexception e) {             e.printstacktrace();         } {             proc.destroy();         }     } } 

the streamgobbler class implemented same here www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html avoid deadlocks. generally, role let thread handle output , error streams of proc object.

i not sure whether appropriate assign 2 different sub-processes same process object above. observe process command1 still runs after calling proc.waitfor(10, timeunit.minutes), creates lot of processes on computer after while. how terminate process of first command ? using java 1.8 on centos 7.

thanks in advance.

in if if reach else statement process has exceeded timeout, before assign new process proc must first terminate previous one. there 2 methods proc.destroy() , proc.destroyforcibly()add of in else statement before proc = runtime.getruntime().exec(command2); , should fine.


Comments

Popular posts from this blog

sql - VB.NET Operand type clash: date is incompatible with int error -

SVG stroke-linecap doesn't work for circles in Firefox? -

python - TypeError: Scalar value for argument 'color' is not numeric in openCV -