java - 如何使用javas Process.waitFor()?

标签 java shellexecute java-io

我正在尝试从 Java 运行命令行命令,快速的健全性检查让我意识到我遇到问题的原因是我无法获得下面的 pr.waitFor() 调用上类。该程序在不到 30 秒内结束,并且在“foo:”之后不打印任何内容。我预计它会花费 30 多秒并在“foo:”之后打印一个随机数。我究竟做错了什么?

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Sample {

    public static void main(String[] args) throws Exception {
        Runtime rt = Runtime.getRuntime();
        Process pr = rt.exec("sleep 32; echo $RANDOM");
        pr.waitFor();

        BufferedReader input = new BufferedReader(
                                   new InputStreamReader(pr.getInputStream()));
        String line=null;

        StringBuilder s = new StringBuilder();
        while((line=input.readLine()) != null) {
            System.out.println(s);
            s.append(line);
        }
        System.out.println("foo: " + s.toString());
    }
}

最佳答案

你应该尝试这个:

Process pr = rt.exec(new String[]{ "bash","-c", "sleep 32; echo $RANDOM" });

这将启动一个 shell 进程,然后在 shell 中运行您的命令。直到命令完成后,shell 才会返回。

请告诉我这是否适合您。

关于java - 如何使用javas Process.waitFor()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6177711/

相关文章:

Java - 从另一个类调用方法[错误]

php - 如何从需要 SUDO 的 php 调用 shell 脚本?

javascript - 从 JavaScript 执行 shell 命令时出现权限被拒绝错误

Java RandomAccessFile 从开始截断

java - Strategy Pattern with strategies 包含相似的代码

java - 传播 Java EE 上下文 Websphere

java - 无法调用方法,因为注入(inject)为 null

c# - 如何通过 C# 传递多个命令行参数

Java IO 文件依赖

java - 如何在套接字连接中下载图像并删除不需要的字节