一个 java 进程能否获取在同一主机上运行的其他 java 进程的 id? [关闭]

Posted

技术标签:

【中文标题】一个 java 进程能否获取在同一主机上运行的其他 java 进程的 id? [关闭]【英文标题】:Can one java process fetch ids of other java processes running on the same host? [closed] 【发布时间】:2012-09-06 12:30:33 【问题描述】:

有没有办法找到当前正在运行的 jvm 并获取它们的 PID? 例如启动 JVisualvm 时,它会显示所有本地 jvm。我怎样才能做到这一点?

背景:我正在从事一个检测项目,我想将代理附加到另一个(未知)java 进程。这个想法是显示所有当前正在运行的 java 进程,并让用户从该列表中选择一个进程。 谢谢!

[edit]我指的是进程,而不是线程。

【问题讨论】:

让两者都使用套接字或管道进行通信会更好吗? 您可以使用jps。它带有 JDK。 我认为不是。由于 OP 希望拥有当前正在运行的进程列表,而不是 JVM 中的线程。 您可能需要使用 Runtime.exec() 运行外部(OS)命令来列出所有 PID 并可能过滤它们。为此,您可以查看this。我不确定这是否有效,这取决于您可以从 PID 列表中获得什么样的信息。 【参考方案1】:

您可以为此使用Runtime。这应该为您提供继续前进的道路。

Process p = Runtime.getRuntime().exec(COMMAND_TO_GET_PROCESS_DATA);

Ref

【讨论】:

谢谢。对您提到的“COMMAND_TO_GET_PROCESS_DATA”有任何想法吗?我希望它在 Windows 上运行。 不确定,但tasklist 可以解决问题。 这解决了您的问题吗? 不完全。我有一些正在运行的进程没有出现在任务列表中,但我承认我没有足够努力...... 我花了一年时间回到那个旧项目,这个解决方案足够可靠。谢谢!

以上是关于一个 java 进程能否获取在同一主机上运行的其他 java 进程的 id? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

获取其他系统上运行进程的日志

通过Docker进程pid获取容器id

C#:让我的程序在同一台机器上的正在运行的进程上调用方法

Docker底层基石namespace与cgroup

Kubernetes-Pod基本概念(六)

当多个java程序在同一台机器上运行时