【问题标题】:Lifetime of Runtime.exec processRuntime.exec 进程的生命周期
【发布时间】:2013-08-13 15:16:03
【问题描述】:

当创建进程的运行时终止时,通过Runtime.exec 创建的Java Process 是否被杀死?还是我必须手动杀死它们,例如通过安装关闭钩子并通过Process.destroy 杀死所有剩余进程。 javadoc 只讨论当运行时继续存在时会发生什么。

【问题讨论】:

    标签: java process


    【解决方案1】:

    Java Process 被创建为 JVM 的子进程。我所知道的所有操作系统都会在父进程终止时杀死子进程。

    但是,如果您创建的进程派生出自己的进程,而不是其子进程(或分离,例如在 Windows GUI 应用程序的情况下),则这些进程可能会在 JVM 终止后继续运行。有一个问题可能与in this question 描述的有关。

    【讨论】:

    • 他说的是通过 Runtime.exec 创建的 Process 对象,它确实是一个单独的进程。
    • 子进程独立的进程。据我了解docs.oracle.com/javase/7/docs/api/java/lang/Process.html,任何Process,无论它是如何创建的,都代表创建过程的子过程。事实上,这对于访问新进程的输入和输出流是必要的。在你喜欢的任务管理器中查看进程树,你会看到 JVM 是父进程。
    • @raphw 是的,很遗憾,您将不得不手动关闭 Word。 Windows 创建处于分离状态的 GUI 应用程序进程。我实际上并不知道这背后的原因,我只知道至少从 Windows 95 开始就是这样。它也不在他们的 CRT 源代码中,它是内核级别的东西。如果您在管理 Word 进程时遇到问题,我从未尝试过,但您可以使用 DDE 自动打开文档,将其转换为 PDF,然后退出应用程序,然后在 Java 端等待进程完成。有一个名为 JDDE 的 Java-DDE 库看起来很有前途。
    • 我试过 POI,它甚至不提供 PDF 转换实用程序和任何转换实用程序。当文档包含的文本不止几行时,即使是商业文本,它们都会产生相当平庸的结果。我当前的解决方案将我使用 POI 操作的 Word 文件写入硬盘,通过 VBS 打开 Word,通过 VBS 转换文件并再次通过 VBS 关闭 Word。当我运行一个启动和关闭 Word 数百次的测试套件时,我仍然保留了几个似乎没有任何用途的附加进程。仍然是我能制造的最好的。
    • 这实际上是我正在做的。我会问客户我是否可以将解决方案开源,也许团队提供的方案可以让这个解决方案从长远来看完全稳定。不过感谢您的提示,我今天会检查一下。
    猜你喜欢
    • 2013-04-06
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-12
    相关资源
    最近更新 更多