動作するかどうかはわかりませんが、Process.destroy()を試すことができます。このようなもの:
ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/C", "\"start;" + command + "\"");
Process p = pb.start();
//...
p.destroy();
また、空のキャッチブロックを書き込まないでください。
} catch (IOException e) {
}
例外がスローされた場合、気づきにくいからです。もちろん、例外を無視できることを知っている場合を除きます。
アップデート:
Linux OSの概念実証:
public static void main(String[] args) throws IOException {
ProcessBuilder pb = new ProcessBuilder("ping","localhost");
pb.redirectErrorStream(true);
Process p = pb.start();
InputStreamReader isr = new InputStreamReader(p.getInputStream());
int ch,count = 0;
StringBuffer sb = new StringBuffer();
while((ch =isr.read()) > -1) {
sb.append((char)ch);
if ((char)ch == '\n') {
System.out.println( sb.toString());
sb = new StringBuffer();
}
if (count++ == 2) {
System.out.println("destroying process");
p.destroy();
}
}
}
出力:
destroying process
PING localhost (127.0.0.1) 56(84) bytes of data.
Exception in thread "main" java.io.IOException: Stream closed
64 bytes from localhost (127.0.0.1): icmp_req=1 ttl=64 time=0.031 ms
at java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:145)
at java.io.BufferedInputStream.read(BufferedInputStream.java:308)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
at sun.nio.cs.StreamDecoder.read0(StreamDecoder.java:107)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:93)
at java.io.InputStreamReader.read(InputStreamReader.java:151)
at com.infobip.rhino.Killer.main(Killer.java:24)
Java Result: 1
エラーストリームが出力ストリームにリダイレクトされるため、行が混乱します