获取单个运行进程的Start-Time



我使用下面的代码来获取Android设备上所有当前正在运行的进程。

// Get running processes
ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> runningProcesses = manager.getRunningAppProcesses();

我还试图使用下面的代码从每个单独的pid-"进程id"中获得Android设备中的所有单独进程启动时间:"/proc/[pid]/stat"从linux获得:

public static long getStartTime(final int pid) throws IOException {
final String path = ("/proc/" + pid + "/stat");
final String stat;
final String field2End = ") ";
final String fieldSep = " ";
final BufferedReader reader = new BufferedReader(new FileReader(path));
 try {
        stat = reader.readLine();
        System.out.println("******Stat******"+ stat);
    } finally {
        reader.close();
    }
try {
        final String[] fields = stat.substring(stat.lastIndexOf(field2End)).split(fieldSep);
        final long processstartTime = .....;
        ...(change processstartTime from clock tick to seconds & return processstartTime value)...
}
}

我确实需要从以下Linux目录路径中获取进程StartTime:"/proc/pid/stat"用于Android设备中每个单独运行的进程。此时,当我为以下Linux目录路径调试语句时:"/proc/[PID]/stat",在以下代码行:System.out.println("******Stat******"+ stat);中,我得到的输出调试为:

* * * * * *统计* * * * * * 642 (flipboard.app) 2848 2848 0 0 1 4194624 126020 101 0 1019 2441 632 0 0 0 0 7040346 1079652352 7233 1079652352 4612 1 0 0 0 0 0 38120 4294967295 0 0 17 1 0 0 0 0 0 0 0 0

此外,我确实知道进程的start_time是以时钟节拍为单位测量的,因此要将其转换为秒,我需要将下面的调用称为"start_time/hertz"。

现在的问题是,我如何在"/proc/[PID]/stat"中获得运行进程开始时间?有人能帮忙吗?谢谢。

单个进程时间的登录可以通过以下方式完成:

public static long getStartTime(final int pid) throws
        IOException {
    final long SYSTEM_CLK_TCK= 100; //needed as value in /proc/[PID]/stat file driectory is in clock ticks,100 is used to convert clock ticks to secs
    final int fieldStartTime = 20; //column 20 of the /proc/[PID]/stat file driectory
try {
        System.out.println("******String path******"+ path);
        stat = reader.readLine();
        System.out.println("******String stat******"+ stat);
    } finally {
        reader.close();
    }
try {
        final String[] fields = stat.substring(stat.lastIndexOf(field2End)).split(fieldSep);
        final long startTime = Long.parseLong(fields[fieldStartTime]);
        System.out.println("******fieldstarttime based on clock ticks******"+ startTime);
        return startTime * msInSec / SYSTEM_CLK_TCK;
}

最新更新