我创建了一个在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();
}
}
答案 0 :(得分:2)
Process' destroy()
的javadoc非常好地解释了
杀死子进程。是否由此表示的子进程 进程对象被强制终止或不被执行 依赖
通常,销毁(或终止)进程的尝试是请求。操作系统可以拦截请求,或者流程本身可以拒绝请求。
关闭进程的正确方法是让进程内部退出,父进程(启动子进程的进程)监听子进程。对于它是否适用于所有情况,以及所有流程,其他任何事情都会变得不稳定。
这就是许多进程(Tomcat就是一个例子)接受一个shutdown命令作为网络请求的原因,因此它可以处理请求,在内部关闭。
答案 1 :(得分:0)
您使用的是最近的Windows吗? 10或甚至8? 然后它与Java无关,新的计算器是一个Windows应用程序应用程序,calc.exe可能只是一个包装器,它在一个新的容器进程中启动它并在它之后存在,它在你试图销毁它时已经消失了。