如何杀死子线程启动的进程?

时间:2013-07-20 17:41:10

标签: java scope

代码:

main function{

Thread t =new Thread(){
     public void run(){
         Process p= Runtime.getRuntime().exec(my_CMD);
     }
};
t.start();
 //Now here, I want to kill(or destroy) the process p.

我怎样才能用Java做到这一点?如果我将其作为

中的类字段
main function{
Process p;
Thread t =new Thread(){
     public void run(){
         p= Runtime.getRuntime().exec(my_CMD);
     }
};
t.start();
 //Now here, I want to kill(or destroy) the process p.

由于它在一个线程中,它要求我将进程P设为final。如果我做final,我就不能在这里指定值。 p= Runtime.getRuntime().exec(my_CMD);。请帮助。

1 个答案:

答案 0 :(得分:3)

Process API已有解决方案。您尝试在流程上调用destroy()时发生了什么?当然假设您已经更改了上面的代码并将Process变量p声明为类字段。

顺便说一句,你应该避免使用Runtime.getRuntime().exec(...)来获取你的进程,而应该使用ProcessBuilder。此外,当可以实现Runnable时,不要扩展Thread。

class Foo {
  private Process p;

  Runnable runnable = new Runnable() {
    public void run() {
      ProcessBuilder pBuilder = new ProcessBuilder(...);  // fill in ...!
      // swallow or use the process's Streams!
      p = pBuilder.start();
    }
  }

  public Foo() {
    new Thread(runnable).start();
  }
}