在java中销毁进程

时间:2017-08-01 18:02:19

标签: java

我创建了一个在java中启动和结束进程的类。我尝试使用或不使用args的mspaint.exe并启动进程, 但是当我试图启动计算器(calc.exe)时,它不起作用。 是否有理由只启动特定流程?

public class XProcess {

    private Process process;
    private String cmd;

    public XProcess(String command) {
        this.cmd = command;
    }
    public synchronized void start() throws IOException{
        process = Runtime.getRuntime().exec(this.cmd);
    }
    public synchronized void destroy(){
        process.destroy();
    }


    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException, InterruptedException {
        XProcess process = new XProcess("mspaint.exe");
        process.start();
        Thread.sleep(5000);
        process.destroy();
    }
}

2 个答案:

答案 0 :(得分:2)

Process' destroy()的javadoc非常好地解释了

  

杀死子进程。是否由此表示的子进程   进程对象被强制终止或不被执行   依赖

通常,销毁(或终止)进程的尝试是请求。操作系统可以拦截请求,或者流程本身可以拒绝请求。

关闭进程的正确方法是让进程内部退出,父进程(启动子进程的进程)监听子进程。对于它是否适用于所有情况,以及所有流程,其他任何事情都会变得不稳定。

这就是许多进程(Tomcat就是一个例子)接受一个shutdown命令作为网络请求的原因,因此它可以处理请求,在内部关闭。

答案 1 :(得分:0)

您使用的是最近的Windows吗? 10或甚至8? 然后它与Java无关,新的计算器是一个Windows应用程序应用程序,calc.exe可能只是一个包装器,它在一个新的容器进程中启动它并在它之后存在,它在你试图销毁它时已经消失了。