【发布时间】:2021-12-10 13:32:55
【问题描述】:
您好,这里是 Java 新手。
我目前正在构建一个使用 Java Process builder 执行多个 linux 命令的 Java 应用程序。
我打算执行一个 shell scipt,由于这个 shell 脚本是一个外部程序,需要大约一秒钟才能完全执行,所以让进程休眠一秒钟并将结果写入一个 txt 文件。
这是一个外部程序,必须输入“q”才能退出程序,所以我最后需要在终端输入q。
我之前在这个社区得到过帮助,我用那个帮助构建的代码如下。
public static void Linux(String fileName){
try {
File dir = new File("/usr/local/bin");
ProcessBuilder pb = new ProcessBuilder(new String[]{"/bin/bash", "-c", "./test_elanprv2.2.sh > \"$1\"; sleep 1; q", "_", fileName + ".txt"});
System.out.println("wrote text");
pb.directory(dir);
Process start = pb.start();
start.destroy();
}catch (Exception e){
e.printStackTrace();
System.out.println("failed to write text");
}
进程构建器确实创建了一个 txt 文件,但它似乎是空的,而且无论我将睡眠设置为多长时间,程序似乎都会立即返回打印语句。
如果有人能告诉我我做错了什么,我将不胜感激。
提前谢谢你!!
【问题讨论】:
-
您应该使用redirectOutput 而不是让 bash 命令执行此操作。并且不要在启动进程后立即调用 start.destroy();让进程完成,首先调用
start.waitFor()。 -
@VGR 感谢您的反馈。但是有没有办法将 q 输入到同一个进程中,因为我需要在进程完成后关闭程序。
标签: java linux sleep processbuilder