JPS工具如何获取正在执行的主类或jar的名称

我想知道,JPS工具如何获得它在jvm进程中执行的主类的名称。 它是

jps -l 123 package.MainClass 456 /path/example.jar

我正在谈论Linux(我对Windows不感兴趣,我没有Win机器去试验)。

我可以想到2种方法

  1. 连接到正在讨论的JVM
  2. /proc文件系统

关于第一种方法,是使用本地JMX连接吗? 不过,它必须去/proc的pids。

  1. 有PID,所以它必须问OS
  2. jps列表本身也是

关于第二个select,我觉得这可能是正确的,因为

  1. 在命令行中,有-jarMainClass
  2. /proc知道PID
  3. jps开始执行某些操作之前,它在/proc拥有自己的文件夹

但是 ,我在这里面临的问题很less。 当java命令非常长(例如,有非常长的-classpath参数)时,有关命令行的信息不适合在/proc为它保留的空间。 我的系统有4kB,而我在别处学到的东西,在OS代码中是硬连线的(改变它需要内核编译)。 但是,即使在这种情况下, jps仍然可以在某个地方获得主类。 怎么样?

我需要find比调用jps更快的方式来获取JVM进程。 当系统负载jps时候(例如,当JVM数量开始的时候), jps卡住了几秒钟(我已经看到它等待大约30秒)。

Solutions Collecting From Web of "JPS工具如何获取正在执行的主类或jar的名称"