从 Java 代码启动的进程没有 return
Process launched from Java code doesn't return
这是我的代码:
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!");
}
我读到输入缓冲区大小应该有问题,但在这种情况下,启动进程的所有输出都重定向到“utils/result.txt”,所以启动进程不应该陷入僵局。当我 运行 来自终端的相同命令时,它起作用了。也许描述什么是 "a.out" 会有所帮助。我是从 flex 文件中获取的,如下所示:
$ flex rulex.lex
$ gcc lex.yy.c -lfl
如有任何帮助,我们将不胜感激。
子进程正在等待读取 stdin
上的数据。 Java 不会在 shell 内启动子进程,因此没有可用的管道。您需要让您的子程序将文件作为参数并自行打开文件。另一种选择是启动 shell(如 bash)并将其告诉 运行 程序,然后文件管道将起作用。
这是我的代码:
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!");
}
我读到输入缓冲区大小应该有问题,但在这种情况下,启动进程的所有输出都重定向到“utils/result.txt”,所以启动进程不应该陷入僵局。当我 运行 来自终端的相同命令时,它起作用了。也许描述什么是 "a.out" 会有所帮助。我是从 flex 文件中获取的,如下所示:
$ flex rulex.lex
$ gcc lex.yy.c -lfl
如有任何帮助,我们将不胜感激。
子进程正在等待读取 stdin
上的数据。 Java 不会在 shell 内启动子进程,因此没有可用的管道。您需要让您的子程序将文件作为参数并自行打开文件。另一种选择是启动 shell(如 bash)并将其告诉 运行 程序,然后文件管道将起作用。