首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在scala中获得Java类PID

如何在scala中获得Java类PID
EN

Stack Overflow用户
提问于 2022-05-27 18:24:47
回答 1查看 55关注 0票数 0

在我的Java程序中,我使用"this.PID“来获取当前进程PID。

我在Scala中寻找类似的东西--如何获得相同的6 char唯一PID (通过java prgm)。

通过多个岗位查看。一旦这样的帖子建议使用"MemoryManagementFactory“。但是,这将返回@Hostname。不过,我正在寻找一种获得类似6 char JVM格式PID的方法。

请建议一下。Scala版本: 2.11

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-14 20:09:55

Scala没有获得进程id的特殊API。当然,由于JVM的原因,这是有限的。因为Scala运行在JVM上,所以无论您在什么体系结构上运行程序,都不会有独立于平台的API。因此,Scala在这个上下文中可以提供的大部分内容都是在Java已经在流程上下文中提供的基础上的包装器。

例如,您可以尝试scala.sys.process,但正如文档所述:

整个包的底层基础是Java和ProcessBuilder类。虽然没有必要使用这些Java类,但它们对可能的东西施加了限制。例如,不能为正在执行的任何内容检索进程id。

然而,在Windows中 --您可以使用ManagementFactory.getRuntimeMXBean.getName方法,它将导致表单[PID]@[MACHINE_NAME]的字符串,并且您可以进一步处理该方法,从而只获得PID。

由于JDK 10,您也可以使用ManagementFactory.getRuntimeMXBean.getPid直接获得PID。

但是在这两种情况下,您都会得到当前正在运行的JVM的PID,所以如果您需要其他运行程序的PID,我认为这是不可能的。

下面是等价的Scala代码:

代码语言:javascript
复制
object Program extends App {

  import java.lang.management.ManagementFactory

  val bean = ManagementFactory.getRuntimeMXBean
  // Get name representing the running Java virtual machine.
  // It returns something like [PID]@[MACHINE_NAME]. The value before
  // the @ symbol is the PID.
  val jvmName = bean.getName
  System.out.println("Name = " + jvmName)

  // Extract the PID by splitting the string returned by the
  // bean.getName() method.
  var pid = jvmName.split("@")(0).toLong
  System.out.println("PID = " + pid)

  // Since JDK 10 you can get the process ID representing the running Java virtual machine.
  pid = ManagementFactory.getRuntimeMXBean.getPid
  System.out.println("PID = " + pid)

}

对我来说,它的产出是:

代码语言:javascript
复制
Name = 12412@VALHALLA
PID = 12412
PID = 12412

VALHALLA是我的主机的名称,而12412是当前JVM实例的PID。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72409645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档