【发布时间】:2020-09-09 18:22:09
【问题描述】:
您好,我在 java 8 中运行外部进程时遇到问题。 基本上我从我的 java 代码中运行 ffplay,如果外部进程有子进程,似乎 .destroy() 方法不起作用。
我的代码是: '''
ProcessBuilder builder = new ProcessBuilder();
builder.command().add("/usr/bin/fplay");
builder.command().add(".........."); // my args
builder.environment().put("LD_LIBRARY_PATH", myCustomLibraryPath);
Process process = builder.start();
// After
process.destroy();
process.destroyForcibly();
''' 但即使在执行了 destroy() 和 destroyForcibly() 之后,ffplay 窗口仍保持打开状态。 我尝试使用 Runtime.getRuntime().exec(......) 而不是 ProcessBuilder ,在这种情况下,destroy 方法似乎关闭了 ffplay 窗口。但我不知道如何在运行时设置 LD_LIBRARY_PATH。
有没有人可以帮助我使用 ProcessBuilder 终止 ffplay 进程或将 LD_LIBRARY_PATH 设置为 Runtime.getRuntime().exec(......)?
【问题讨论】:
-
在
Runtime.exec中设置 envvar(s) 使用 one of the overloads that takes envp e.g. 但它在下面使用相同的Process实现,所以我怀疑 destroy 会更好。 -
@dave_thompson_085,奇怪的是我在帖子中描述的。似乎问题仅出在脚本上。
-
是的,运行脚本可以创建与直接运行程序不同的进程树,这也使得killilng 非常不同,具体取决于使用的shell 和脚本的详细信息。如果这是你的问题,也许你应该问一下。 Stack 不是讨论组或聊天室;你应该把问题——单数——放在问题中。
-
@Masso 你有没有找到解决这个问题的方法?我面临着完全相同的问题,我想也许我只是做错了什么。我的代码和你的几乎一样。
标签: java