明白!下面给你几个实用的 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