加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java进程执行的Windows进程没有终止

发布时间:2020-12-14 17:46:43 所属栏目:Java 来源:网络整理
导读:我从 Java在Windows上创建一个进程.我的问题是这个过程不会终止.这是一个示例程序: import java.io.IOException;public class Test {/** * @param args * @throws IOException * @throws InterruptedException */public static void main(String[] args) th
我从 Java在Windows上创建一个进程.我的问题是这个过程不会终止.这是一个示例程序:
import java.io.IOException;

public class Test {

/**
 * @param args
 * @throws IOException
 * @throws InterruptedException
 */
public static void main(String[] args) throws IOException,InterruptedException {
    Process process = Runtime.getRuntime().exec("cmd /c dir");
    process.waitFor();
    }
}

为了超出我的理解,这个程序永远不会完成.如果“cmd / c dir”被替换为ipconfig以及其他的东西,这是真的.

我可以看到使用ProcessExplorer,java创建了cmd进程.这个样本显然是一个简化;在我的原始程序中,我发现如果我在一段时间后调用process.destroy(),并检查cmd进程输出,那么该命令将被成功执行.

我已经尝试过与Java 1.5和1.6的各种版本.我的操作系统是Windows XP Pro,SP 2.

解决方法

很可能只需要读取进程的stdout和stderr,否则它会在输出缓冲区已满时挂起.如果您将stderr重定向到stdout,这样最简单,只是为了安全起见:
public static void main(String[] args) throws IOException,InterruptedException {
        String[] cmd = new String[] { "cmd.exe","/C","dir","2>&1" };
        Process process = Runtime.getRuntime().exec(cmd);
        InputStream stdout = process.getInputStream();
        while( stdout.read() >= 0 ) { ; }
        process.waitFor();
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读