java process exit_java – Process.exitValue()和Process.destroy()功能

我一直在尝试使用Process和ProcessBuilder来配合这个SSCCE.

import java.io.IOException;

public class TestProcess {

public static void main(String[] args) {

Process process = null;

ProcessBuilder pb = new ProcessBuilder("notepad.exe");

try {

process = pb.start();

} catch (IOException e) {e.printStackTrace();}

//have some time to close notepad

try {

Thread.sleep(10*1000);

} catch (InterruptedException ignored) {}

try {

System.out.println(process.exitValue());

} catch (IllegalThreadStateException e) {

System.out.println(e);

}

if (process != null)

process.destroy();

/*try {

Thread.sleep(0, 1);

} catch (InterruptedException ignored) {}*/

System.out.println(process.exitValue());

}

}

>如果我在10秒超时之前运行此代码并关闭记事本. destroy()调用在尝试停止已经终止的进程时没有显示任何问题.为什么?

>如果运行此代码并且根本不关闭记事本(使用注释的第二次睡眠)

似乎destroy是异步调用(只发送一个信号?),导致第二个exitValue()异常

java.lang.IllegalThreadStateException: process has not exited

Exception in thread "main" java.lang.IllegalThreadStateException: process has not exited

at java.lang.ProcessImpl.exitValue(ProcessImpl.java:246)

at TestProcess.main(TestProcess.java:30)

>如果我运行此代码并且根本没有关闭记事本(使用未注释的第二次休眠),则第二个exitValue永远不会抛出异常,即使睡眠值仅为1ms.是因为sleep()开销本身?

第二个exitValue将返回1.

PS.我从Windows 7和Eclipse运行它.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值