当前位置: 首页 > 知识库问答 >
问题:

使用ProcessBuilder()销毁java进程时出现问题

巴博耘
2023-03-14

嗨,我在java 8中运行外部进程有问题。基本上,我可以从我的java代码运行ffplay,如果外部进程有子进程,似乎.毁()方法不起作用。

我的代码是:''

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();

''但即使在执行销毁()和强制销毁()之后,ffplay窗口仍保持打开状态。我试着使用Runtime。getRuntime()。执行官(……)而不是ProcessBuilder,在本例中,销毁方法似乎会关闭ffplay窗口。但我不知道如何在运行时设置LD_LIBRARY_PATH。

有没有人可以帮我用ProcessBuilder终止ffplay进程,或者将LD_LIBRARY_路径设置为Runtime。getRuntime()。执行官(……)?

共有2个答案

高勇
2023-03-14

上周,我遇到了一个问题,我从ProcessBuilder开始编写批处理脚本。我的解决方案是

Runtime.getRuntime().exec("taskkill /F /IM cmd.exe")
滕无尘
2023-03-14

@dave_thompson_085我注意到一件奇怪的事情,destroy不起作用的问题只是脚本。如果我这样做的话,让我更好地解释一下:

ProcessBuilder builder = new ProcessBuilder();
builder.command().add("ffplay");
builder.command().add("/videos/TEST.mp4");
Process process = builder.start();

destroy()方法关闭ffplay窗口。但如果我创建一个名为myScript的脚本。只有这一行的sh:

ffplay /videos/TEST.mp4

我确实:

ProcessBuilder builder = new ProcessBuilder();
builder.command().add("myScript.sh");
Process process = builder.start()

破坏()方法不会关闭ffplay窗口。

 类似资料:
  • 我有一个应用程序,包括使用ActionBarSherlock在标签模式。我有5个标签,每个标签的内容都是使用片段处理的。然而对于tab2,我有一个片段,其中的xml文件包含一个ViewPager元素,该元素反过来又有一些片段页面。当我最初启动应用程序时,我可以在选项卡之间切换,没有问题,但是当我第二次按下选项卡2时,我就会出现上面提到的错误。主要活动如下: 不带ViewPager的fragment

  • 对象使用完之后需要对其进行清除。对象的清除是指释放对象占用的内存。在创建对象时,用户必须使用 new 操作符为对象分配内存。不过, 在清除对象时,由系统自动进行内存回收,不需要用户额外处理。这也是 Java 语言的一大特色,某种程度上方便了程序员对内存的管理。 Java 语言的内存自动回收称为 垃圾回收(Garbage Collection)机制,简称 GC。垃圾回收机制是指 JVM 用于释放那些

  • 我是一个蟒蛇初学者。试着做一个新的按钮来关闭窗口。我得到了错误消息: 异常在Tkinter回调Traceback(最近调用最后):文件/系统/库/框架/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py,第1536行,在调用返回self.func(*args)文件tk_cp_successful.py,第138行,在按钮推送s

  • 我正在尝试不带参数地运行“/home/simulations/scripts/getdsuip . sh”命令。 当我在机器上手动运行这个命令时,效果很好!所以这个文件肯定在那里,肯定是可以运行的(755),并且在同一个用户(root)下。我只在一台机器上看到这个问题,它在其他地方也能工作,但我想弄清楚为什么它会失败。 这会导致以下错误: 我还尝试了其他方法来运行它,结果也是同样的错误: 这是我尝

  • 销毁 Destroy 在不需要使用iScoll的时候调用iScroll实例的公共方法destroy()可以释放一些内存。 myScroll.destroy(); myScroll = null;

  • 问题内容: 我一直在尝试使用Java的ProcessBuilder在Linux中启动应“长期”运行的应用程序。该程序的运行方式是启动命令(在本例中,我正在启动媒体播放应用程序),允许其运行并检查以确保它没有崩溃。例如,检查PID是否仍处于活动状态,然后重新启动该进程(如果已终止)。 我现在遇到的问题是PID在系统中仍然有效,但是应用程序的GUI挂起了。我尝试将ProcessBuilder(cmd)