明白!下面给你几个实用的 Java进程状态监控相关的命令和Java代码示例,演示如何用 jps
查找进程,再用 Java 代码通过 ProcessBuilder
调用系统命令获取Java进程信息。
1. 使用 jps 命令获取本机Java进程列表(Shell命令)
jps -l
示例输出:
23456 com.example.MyApp
34567 org.apache.catalina.startup.Bootstrap
45678 sun.tools.jps.Jps
2. Java代码调用 jps 命令并解析输出(Java示例)
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class JpsExample {
public static void main(String[] args) {
try {
ProcessBuilder pb = new ProcessBuilder("jps", "-l");
Process process = pb.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
System.out.println("当前Java进程列表:");
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
int exitCode = process.waitFor();
System.out.println("命令执行完成,退出码:" + exitCode);
} catch (Exception e) {
e.printStackTrace();
}
}
}
3. 结合 jstack 读取某Java进程的线程堆栈(Java示例)
假设你已通过jps找到某Java进程PID,使用Java代码调用jstack:
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class JstackExample {
public static void main(String[] args) {
if (args.length != 1) {
System.out.println("Usage: java JstackExample <pid>");
System.exit(1);
}
String pid = args[0];
try {
ProcessBuilder pb = new ProcessBuilder("jstack", pid);
Process process = pb.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
System.out.println("线程堆栈信息 for PID " + pid + ":");
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
int exitCode = process.waitFor();
System.out.println("jstack 执行完成,退出码:" + exitCode);
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行示例:
java JstackExample 23456
4. 使用 jps + jstack 简易脚本示例 (Linux Shell)
#!/bin/bash
echo "当前Java进程列表:"
jps -l
read -p "请输入要查看线程堆栈的PID:" pid
echo "线程堆栈信息:"
jstack $pid
发表回复