如何杀死java中的进程启动的子进程?

时间:2013-07-21 09:20:36

标签: java process

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

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

3 个答案:

答案 0 :(得分: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()将按您的要求运行。

答案 1 :(得分: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);

这段代码不会完全正常工作,但你只需要稍微调整一下。

答案 2 :(得分:-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 ");
            }


        });





}
}