从Java代码启动的进程无法返回

时间:2016-04-26 08:49:08

标签: java process lex

这是我的代码:

Process p1;
    try {
        p1 = Runtime.getRuntime().exec( "utils/a.out < utils/test_c2.txt > utils/result.txt" );
        p1.waitFor();
    } catch ( Exception e ) {
        System.out.println("Something went bad!");
    }

我已经读过输入缓冲区大小应该有问题,但是在这种情况下,启动进程的所有输出都被重定向到&#34; utils / result.txt&#34;,因此启动的进程不应该达到死锁。当我从终端运行相同的命令时它工作。也许描述什么是&#34; a.out&#34;会有所帮助。我从flex文件中获取它如下:

$ flex rulex.lex
$ gcc lex.yy.c -lfl

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

子进程正在等待读取stdin上的数据。 Java不会在shell中启动子进程,因此没有可用的管道。您需要使子程序将文件作为参数并打开文件本身。另一个选择是启动一个shell(比如bash)并告诉它运行程序,然后文件管道就可以了。