ManagementFactory
ManagementFactory 是一个为我们提供各种获取 JVM 信息的工厂类,使用 ManagementFactory 可以获取大量的运行时 JVM 信息,比如 JVM 堆的使用情况,GC 情况,线程信息等。通过这些数据项我们可以了解正在运行的 JVM 的情况,以便我们可以做出相应的调整。
使用 ManagementFactory 获取运行时进程 PID 方式如下:
| |
ApplicationPidFileWriter
在任何 Java 工程中我们可以将 ManagementFactory 方式封装成一个工具类使用,如果我们基于 Spring Boot 搭建工程,也可使用其提供的机制进行获取 PID。
ApplicationPidFileWriter 是 Spring Boot 提供的一个 Listener,它可以在应用启动后把 PID 写入到指定的文件,具体实现方式如下:
修改启动类:
| |
默认会将 pid 写入到 appplication.pid 文件中。
也可修改配置文件(以 application.properties 为例):
| |
如此配置后,在启动 Spring Boot 工程后,会将当前 PID 写入到 spring.pid.file 指定的文件中。
JPS
JDK 提供了 jps 命令。(JDK 提供的工具,需在机器上安装 JDK 并正确配置环境变量)
直接在终端输入 jps,即可列出所有 Java 进程的 PID 及对应的进程名称。
PS
如果应用运行在 Linux 系统,同时机器未安装 JDK,那么可以通过 ps 命令配合表达式来查询指定进程的 PID:
| |
命令说明:
ps是一个用于查询当前运行进程的命令-ef是ps命令的选项,用于显示所有进程的详细信息,包括进程的用户、进程 ID(PID)、父进程 ID(PPID)、CPU 使用情况等。|是管道符号,用于将一个命令的输出作为另一个命令的输入。grep是一个用于在文本中搜索指定内容的命令。your-jar-name.jar是指要搜索的内容关键字
$!
如果应用运行在 Linux 系统,同时使用 shell 脚本启动应用,则可通过 $! 变量获取应用的 PID:
| |
命令说明:
nohup:它会忽略SIGHUP 信号(终端挂起信号),这样即使关闭终端,进程也会继续运行。&:将命令置于后台运行。echo $! > app.pid将刚刚启动的进程 PID 写入到文件app.pid中。


感谢您的耐心阅读!来选个表情,或者留个评论吧!