gpt4 book ai didi

java - 从 Java 运行 Ping -t 并在关闭时结束进程

转载 作者:行者123 更新时间:2023-11-30 11:36:50 25 4
gpt4 key购买 nike

我有一个简单的 GUI 程序,其中一个功能是从文件 ping 目标。当使用正常的 ping x.x.x.x 时,我的 ping 运行良好,但是当使用 -t 命令运行它时,我注意到即使在关闭命令窗口后 ping.exe 仍然显示在进程列表中。我知道可以使用 ctrl+c 结束进程,但是当用户关闭 cmd 窗口时,是否有其他方法可以结束进程?

我目前正在使用这段代码:

try {
ipPing = VNC.getIp().concat(ext);
String command = "ping " + ipPing;
Runtime rt = Runtime.getRuntime();
rt.exec(command);
rt.exec(new String[]{"cmd.exe", "/C", "\"start;" + command + "\""});

} catch (IOException e) {
}

任何建议和提示将不胜感激

最佳答案

我不确定它是否有效,但你可以试试 Process.destroy() .像这样:

ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/C", "\"start;" + command + "\"");
Process p = pb.start();
//...
p.destroy();

另外,不要写空的 catch block :

} catch (IOException e) {
}

因为如果抛出异常,将很难注意到。当然,除非您知道可以忽略异常。

更新:

Linux 操作系统的概念验证:

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

由于错误流被重定向到输出流,行被弄乱了

关于java - 从 Java 运行 Ping -t 并在关闭时结束进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14367400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com