【问题标题】:Can I attach to a JVM in a different process?我可以在不同的进程中附加到 JVM 吗?
【发布时间】:2015-05-05 06:32:50
【问题描述】:

我有进程 A 和进程 B。
进程 A 不允许实例化自己的 JVM。
进程 B 有一个正在运行的 JVM 实例。

进程 A 如何附加到进程 B 中运行的 JVM 并使用它在进程 A 中运行 Java 代码。

注意:不允许在进程 B 中进行 Java 处理。

【问题讨论】:

  • 您是否有任何理由需要直接访问进程 A 中的 JVM?可以只使用一些基于文件的协议在这些进程之间进行通信吗?
  • 基于套接字的协议也非常适合进程间通信。也许看看这样的东西:zeromq.org
  • 你能编辑B吗? B 是否已经运行任何可用于运行代码的远程服务?如果不是,您可能必须查看调试接口以附加到远程 JVM(如果您自己编写“调试器”代码,这不一定需要 Java)并注入代码。听起来像一个讨厌的项目......

标签: java c++ c windows java-native-interface


【解决方案1】:

可能:这正是典型的 Java 调试器所做的。 JVM 导出调试接口,您可以附加并使用这些接口来控制正在运行的 Java 程序(包括注入您自己的代码)。

您有两个选择:编写Java Debug Wire Protocol (JDWP) 客户端,或编写JVM Tooling Interface (JVMTI) 客户端。后者更容易,但支持得不太好——你必须检查你的目标 JVM 是否支持它。

例如,使用 JVMTI,您可以编写“调试器”代码,该代码使用 JVMTI API 自动注入远程进程的 JVM(它本身是用 C/C++ 实现的,因此您不需要在您的运行它的过程)。然后,您的“调试器”代码可以进行所需的任何计算。

【讨论】:

    猜你喜欢
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多