gpt4 book ai didi

java - 通过 JNI 将 native 应用程序附加到已在 Linux 上运行的 JVM

转载 作者:IT王子 更新时间:2023-10-29 00:33:31 25 4
gpt4 key购买 nike

A similar question已经回答了 Windows,但我无法找到如何在 Linux 上实现相同的。

我想加深对 JNI 的了解。我已经有了使用 JNI_CreateJavaVM 的 JNI 项目,从 native 应用程序中创建一个新的 JVM。

但这次我想在 native 应用程序中创建 JVM(即,使用 JNI_CreateJavaVM ),而是附加到一个已经运行的应用程序(即,在通过某些 java myApplication 调用在 native 应用程序之前启动的 VM 上使用 AttachCurrentThread)。

有没有办法在 Linux 上实现这个?我需要获取正在运行的 JVM 的 JavaVM 对象。我尝试使用 JNI_GetCreatedJavaVMs ,但这不会返回任何 JVM(我认为此方法仅返回当前进程创建的 VM,例如,通过使用 JNI_CreateJavaVM,而不是系统上运行的所有 VM)

最佳答案

JNI 函数只能在启动 JVM 的进程中使用。 JNI 不允许您控制其他进程。

但是,有一种方法可以使用 HotSpot Dynamic Attach API 在不同 JVM 进程的上下文中加载您的代码。

  • 将您的代码编译成代理库 (.so);
  • 创建 Agent_OnAttach将成为您代码入口点的函数;
  • 使用动态附加加载代理库。

Java API附加到远程 JVM 和 load代理库在其上下文中。但您也可以像我的 jattach 中那样从 native 代码执行此操作项目。

关于java - 通过 JNI 将 native 应用程序附加到已在 Linux 上运行的 JVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38588632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com