如何从命令行查询正在运行的java应用程序?

如何从命令行查询正在运行的java应用程序?,java,command-line,command-line-interface,Java,Command Line,Command Line Interface,我有一个运行在服务器上的Java Scala web应用程序。如何创建用于访问/查询正在运行的应用程序的cli界面?在mininum中,我只需要调用正在运行的应用程序的方法并检索它返回的字符串,所有这些都是从命令行执行的。我该怎么做 注:似乎与我的问题有关,但感觉有点过头了。我只想编写一个bash脚本或一个小型java程序,它可以“钩住”已经运行的应用程序。您的程序可以使用attach API定位正在运行的JVM并连接到它 然后,您可以告诉它将代理加载到JVM中。看见 , “VM启动后启动代理

我有一个运行在服务器上的Java Scala web应用程序。如何创建用于访问/查询正在运行的应用程序的cli界面?在mininum中,我只需要调用正在运行的应用程序的方法并检索它返回的字符串,所有这些都是从命令行执行的。我该怎么做


注:似乎与我的问题有关,但感觉有点过头了。我只想编写一个bash脚本或一个小型java程序,它可以“钩住”已经运行的应用程序。

您的程序可以使用attach API定位正在运行的JVM并连接到它

然后,您可以告诉它将代理加载到JVM中。看见 , “VM启动后启动代理”一章,了解如何实现此类代理

此代理可以在目标JVM中调用所需的方法。请注意,在处理管理另一个应用程序时,您可能希望执行的许多操作已经存在JMX代理。值得研究。

使用JMX 考虑到您的需求,最简单的解决方案很可能是使用。这正是它的目的,因为它是API

您可以在中找到非常详细的。它相对简单。您的Java程序将侦听来自JMX客户端的连接,并允许您查询自己的(MBean)

然后,管理员将能够使用与JMX兼容的客户端(例如
jconsole
)或自定义客户端。请看这里

另一个好的——尽管现在有点古老——教程是


如果您希望截取特定函数的返回值,而不是创建自己的用于监视和管理的扩展点,那么您更可能希望使用调试器

此外,您可能对以下问题感兴趣:


为什么?调试?如果是,请使用jdb。现在我真的看不出任何合理的原因,方法很可能取决于程序的内部状态,除非它完全不变。@zeller,是的,调试和维护。要创建的接口仅适用于服务器管理员。要调用的方法取决于并更改程序的状态。抱歉。。我一开始没有得到正确的答案,最后使用JMX和jmxterm。有一个很好的命令行JMX客户机列表。@DominykasMostauskis:太好了。很高兴为您的用例工作。