在我的Java程序中,我使用"this.PID“来获取当前进程PID。
我在Scala中寻找类似的东西--如何获得相同的6 char唯一PID (通过java prgm)。
通过多个岗位查看。一旦这样的帖子建议使用"MemoryManagementFactory“。但是,这将返回@Hostname。不过,我正在寻找一种获得类似6 char JVM格式PID的方法。
请建议一下。Scala版本: 2.11
发布于 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代码:
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)
}对我来说,它的产出是:
Name = 12412@VALHALLA
PID = 12412
PID = 12412VALHALLA是我的主机的名称,而12412是当前JVM实例的PID。
https://stackoverflow.com/questions/72409645
复制相似问题