You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android平台:如何通过编程获取指定进程的父进程ID

在Android中通过进程ID获取父进程ID的实现方法

在Android上,你可以借助Linux内核的proc文件系统来获取指定进程ID(PID)的父进程ID(PPID),以下是两种可行的实现方式:

方法一:解析/proc/[pid]/status文件

每个进程的/proc/[pid]/status文件中包含了进程的状态信息,其中PPid:行明确记录了父进程ID。

代码实现(Java)

public static int getParentPid(int targetPid) {
    BufferedReader reader = null;
    try {
        reader = new BufferedReader(new FileReader("/proc/" + targetPid + "/status"));
        String line;
        while ((line = reader.readLine()) != null) {
            if (line.startsWith("PPid:")) {
                // 分割行内容,提取数字部分
                String[] segments = line.trim().split("\\s+");
                if (segments.length >= 2) {
                    return Integer.parseInt(segments[1]);
                }
                break;
            }
        }
    } catch (IOException e) {
        // 处理文件不存在、权限不足等异常
        e.printStackTrace();
    } finally {
        if (reader != null) {
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return -1; // 获取失败返回-1
}

方法二:解析/proc/[pid]/stat文件

/proc/[pid]/stat文件以空格分隔记录了进程的核心信息,其中父进程ID是第四个字段(注意进程名可能包含空格,需要先跳过进程名字段)。

代码实现(Java)

public static int getParentPidFromStat(int targetPid) {
    BufferedReader reader = null;
    try {
        reader = new BufferedReader(new FileReader("/proc/" + targetPid + "/stat"));
        String line = reader.readLine();
        if (line == null) return -1;
        
        // 先定位进程名的右括号,避免进程名含空格导致分割错误
        int closeParenPos = line.indexOf(')');
        if (closeParenPos == -1) return -1;
        
        // 提取括号后的内容并分割,父进程ID是分割后的第二个元素(索引1)
        String statContent = line.substring(closeParenPos + 1).trim();
        String[] statSegments = statContent.split("\\s+");
        if (statSegments.length >= 2) {
            return Integer.parseInt(statSegments[1]);
        }
    } catch (IOException | NumberFormatException e) {
        e.printStackTrace();
    } finally {
        if (reader != null) {
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return -1;
}

注意事项

  • 权限限制:读取/proc目录无需申请存储权限,但如果目标进程是系统进程或其他应用的私有进程,你的应用可能因权限不足无法访问对应文件,此时会抛出FileNotFoundException,需做好异常处理。
  • PID有效性:如果传入的PID已失效(进程已结束),会出现文件不存在的情况,需提前判断或捕获异常。
  • 兼容性:该方法基于Linux的proc文件系统,所有Android设备均支持,兼容性良好。

内容的提问来源于stack exchange,提问作者user2515165

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 14:15:44