你好,我有一个在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窗口。但我不知道如何在Runtime中设置LD_LIBRARY_PATH。
有人能帮我用ProcessBuilder终止ffplay进程或在Runtime.getRuntime().exec(......)中设置LD_LIBRARY_PATH吗?
Runtime.exec
中设置envvar(s),请使用其中一个重载函数来设置envp,例如但是它在底层使用了相同的Process
实现,因此我怀疑销毁功能是否会更好。 - dave_thompson_085