如何获得我的Java进程的id ?
我知道有一些平台相关的黑客,但我更喜欢一个更通用的解决方案。
如何获得我的Java进程的id ?
我知道有一些平台相关的黑客,但我更喜欢一个更通用的解决方案。
当前回答
自Java 9以来,有一个方法process . getpid(),它返回进程的本机ID:
public abstract class Process {
...
public long getPid();
}
要获取当前Java进程的进程ID,可以使用ProcessHandle接口:
System.out.println(ProcessHandle.current().pid());
其他回答
在Scala中:
import sys.process._
val pid: Long = Seq("sh", "-c", "echo $PPID").!!.trim.toLong
在Java 9发布之前,这将为您在Unix系统上提供一个变通方案。 (我知道,这个问题是关于Java的,但由于Scala没有相应的问题,所以我想把这个问题留给Scala用户,他们可能会遇到同样的问题。)
你可以在GitHub上查看我的项目:JavaSysMon。它提供了进程id和一堆其他东西(CPU使用率,内存使用率)跨平台(目前是Windows, Mac OSX, Linux和Solaris)
为完整起见,Spring Boot中有一个用于
String jvmName = ManagementFactory.getRuntimeMXBean().getName();
return jvmName.split("@")[0];
解决方案。如果需要一个整数,那么可以将其总结为一行代码:
int pid = Integer.parseInt(ManagementFactory.getRuntimeMXBean().getName().split("@")[0]);
如果有人已经使用了Spring引导,她/他可能会使用org.springframework.boot.ApplicationPid
ApplicationPid pid = new ApplicationPid();
pid.toString();
toString()方法输出pid或'?? '。
使用ManagementFactory的注意事项已经在其他回答中讨论过了。
基于Ashwin Jayaprakash的答案(+1) 关于Apache 2.0许可的SIGAR,下面是我如何使用它来获得当前进程的PID:
import org.hyperic.sigar.Sigar;
Sigar sigar = new Sigar();
long pid = sigar.getPid();
sigar.close();
尽管它不能在所有平台上工作,但它可以在Linux、Windows、OS X和这里列出的各种Unix平台上工作。
自Java 9以来,有一个方法process . getpid(),它返回进程的本机ID:
public abstract class Process {
...
public long getPid();
}
要获取当前Java进程的进程ID,可以使用ProcessHandle接口:
System.out.println(ProcessHandle.current().pid());