Java ProcessBuilder 无法启动 GNU 屏幕
Java ProcessBuilder is not able to start GNU screen
我遇到了 java 的 ProcessBuilder 的奇怪行为。
我尝试的是使用 shell 停止 运行ning 屏幕,删除一些文件夹,然后使用另一个 shell 脚本重新启动屏幕。
第一步,杀运行ning屏,运行完美使用:
ProcessBuilder pb0 = new ProcessBuilder(System.getProperty("user.dir") + "/generator/stop.sh");
在这个stop.shshell我只是运行
screen -X -S generator kill
正常工作。
之后,我使用 org.apache.commons.io.FileUtils 删除了我的目录,然后我想再次启动屏幕。目前我是这样做的:
System.out.println("Restarting the generator");
ProcessBuilder pb1 = new ProcessBuilder();
pb1.directory(new File(System.getProperty("user.dir") + "/generator"));
pb1.command("./start.sh");
try {
Process process = pb1.start();
System.out.printf("Started the generator with %d", process.waitFor());
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
这给出了 "Started the generator with 1",这向我表明屏幕 运行s 在使用 screen -ls 检查时根本不是这种情况。
没有错误,没有关于如何从这里继续前进的线索
里面 start.sh:
screen -S generator java -Xms2G -Xmx2G -jar generator.jar
PS: 我正在使用 Debian 10。
也许有人可以在这里帮助我?
问候!
你永远不应该忽略进程输出,因为它的缓冲区长度有限,如果你不消费它,它就会挂起。我不确定这是否会导致您的问题,但这绝对是您应该做的事情。
也有可能进程抛出一些您看不到的错误,因为您忽略了它的输出(在这种情况下,这将有助于您调查问题)。
试试这个:
new ProcessBuilder()
.redirectOutput(ProcessBuilder.Redirect.INHERIT)
.redirectError(ProcessBuilder.Redirect.INHERIT)
...
这会将进程输出流和输入流重定向到它的父级(即您的应用程序)。
我遇到了 java 的 ProcessBuilder 的奇怪行为。 我尝试的是使用 shell 停止 运行ning 屏幕,删除一些文件夹,然后使用另一个 shell 脚本重新启动屏幕。 第一步,杀运行ning屏,运行完美使用:
ProcessBuilder pb0 = new ProcessBuilder(System.getProperty("user.dir") + "/generator/stop.sh");
在这个stop.shshell我只是运行
screen -X -S generator kill
正常工作。 之后,我使用 org.apache.commons.io.FileUtils 删除了我的目录,然后我想再次启动屏幕。目前我是这样做的:
System.out.println("Restarting the generator");
ProcessBuilder pb1 = new ProcessBuilder();
pb1.directory(new File(System.getProperty("user.dir") + "/generator"));
pb1.command("./start.sh");
try {
Process process = pb1.start();
System.out.printf("Started the generator with %d", process.waitFor());
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
这给出了 "Started the generator with 1",这向我表明屏幕 运行s 在使用 screen -ls 检查时根本不是这种情况。 没有错误,没有关于如何从这里继续前进的线索
里面 start.sh:
screen -S generator java -Xms2G -Xmx2G -jar generator.jar
PS: 我正在使用 Debian 10。 也许有人可以在这里帮助我? 问候!
你永远不应该忽略进程输出,因为它的缓冲区长度有限,如果你不消费它,它就会挂起。我不确定这是否会导致您的问题,但这绝对是您应该做的事情。
也有可能进程抛出一些您看不到的错误,因为您忽略了它的输出(在这种情况下,这将有助于您调查问题)。
试试这个:
new ProcessBuilder()
.redirectOutput(ProcessBuilder.Redirect.INHERIT)
.redirectError(ProcessBuilder.Redirect.INHERIT)
...
这会将进程输出流和输入流重定向到它的父级(即您的应用程序)。