3

在下面的代码片段中,如果我仅Process p使用p.destroy()进程p(即cmd.exe)进行销毁,则会被销毁。但不是它的孩子iperf.exe。如何在 Java 中终止此过程。

Process p= Runtime.getRuntime().exec("cmd /c iperf -s > testresult.txt");
4

3 回答 3

3

在 Java 7 ProcessBuilder可以为你做重定向,所以直接运行 iperf 而不是通过cmd.exe.

ProcessBuilder pb = new ProcessBuilder("iperf", "-s");
pb.redirectOutput(new File("testresult.txt"));
Process p = pb.start();

结果p现在是 itext 本身,因此destroy()可以按您的需要工作。

于 2013-07-21T10:15:51.863 回答
1

您应该改用此代码:

Process p= Runtime.getRuntime().exec("iperf -s");
InputStream in = p.getInputStream();
FileOutputStream out = new FileOutputStream("testresult.txt");
byte[] bytes;
in.read(bytes);
out.write(bytes);

这段代码不能完全正常工作,但你只需要稍微摆弄一下流。

于 2013-07-21T09:28:00.627 回答
-1

您可以参考以下代码片段:

public class Test {

public static void main(String args[]) throws Exception {


    final Process process = Runtime.getRuntime().exec("notepad.exe");

        //if killed abnormally ( For Example using ^C from cmd)
        Runtime.getRuntime().addShutdownHook(new Thread() {

            @Override
            public void run() {

                process.destroy();
                System.out.println(" notepad killed ");
            }


        });





}
}
于 2016-02-20T09:08:52.393 回答