【问题标题】:Getting human readable info about CPU获取有关 CPU 的人类可读信息
【发布时间】:2020-03-07 00:24:15
【问题描述】:

我正在尝试获取有关智能手机 CPU 的信息。 我可以通过显示 /proc/cpuinfo 文件来获得它。然而,它的输出很差而且不可读。 我想从“lscpu”命令中获得输出,但是当我从我的应用程序执行命令“lscpu”时,我没有权限这样做(但是我可以从手机上的 Termux 控制台执行此操作并且输出是可读的)。 你有什么想法如何让人类可读吗?

这里是查看 /proc/cpuinfo 文件的代码:

static class CMDExecute {
    synchronized String run(String[] cmd)
            throws IOException {
        String result = "";

        try {
            ProcessBuilder builder = new ProcessBuilder(cmd);
            builder.redirectErrorStream(true);
            Process process = builder.start();
            InputStream in = process.getInputStream();
            byte[] re = new byte[1024];
            while (in.read(re) != -1) {
                System.out.println(new String(re));
                result = result + new String(re);
            }
            in.close();

        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return result;
    }
}

private static StringBuffer buffer;

public static void fetch_cpu_info() {
    String result = null;
    CMDExecute cmdexe = new CMDExecute();
    try {
        String[] args = {"/system/bin/cat", "/proc/cpuinfo"};
        result = cmdexe.run(args);
        System.out.println("RESULT\n" + result);
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}

及其输出:

I/System.out: 结果

processor   : 0
Features    : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt lpae evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part    : 0xd03
CPU revision    : 4
processor   : 1
Features    : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt lpae evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part    : 0xd03
CPU revision    : 4
processor   : 2
Features    : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt lpae evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part    : 0xd03
CPU revision    : 4
processor   : 3
Features    : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt lpae evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part    : 0xd03
CPU revision    : 4

如您所见,它的输出非常差。当我尝试从我的代码中执行“lscpu”命令时,只更改一行:

        String[] args = {"/system/bin/cat", "/proc/cpuinfo"};

        String[] args = {"lscpu"};

我收到错误:

W/System.err:java.io.IOException:无法运行程序“lscpu”:错误=13,权限被拒绝

但是,我的手机上有应用程序 Termux。它是 shell 控制台,我不知道为什么,但我可以在这个控制台中执行“lscpu”(我不能从应用程序代码中执行)。看看这个:

lscpuoutput

我想将该输出输入到我的应用程序中。你有什么想法如何获得关于 CPU 信息的良好的人类可读输出吗?

如果有任何帮助,我将不胜感激!

【问题讨论】:

    标签: java android human-readable


    【解决方案1】:

    好的。我能够解决大部分问题。只关注 /proc/cpuinfo 不是一个好主意。 相反,我设法获得了这样有趣的硬件信息:

    获取智能手机制造商和型号。在我的情况下,输出是:“samsung SM-J730F”:

        String manufacturer = Build.MANUFACTURER;
        String model = Build.MODEL;
    

    此命令显示 CPU 核心数:

        Runtime.getRuntime().availableProcessors()
    

    从这个文件你可以得到你的 CPU 频率。记得使用 .trim() 因为这个文件可能包含空格字符,就像我的情况一样,我在将结果转换为浮点数以进行进一步操作时遇到问题:

       ("/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq").trim()
    

    包含在线 CPU 数量的文件:

       /sys/devices/system/cpu/online
    

    包含离线 CPU 数量的文件。如果所有 CPU 都在线,这个文件似乎是空的,但它可能包含空格字符:

      ("/sys/devices/system/cpu/offline").trim()
    

    获取架构的命令:

    System.getProperty("os.arch")
    

    通过所有这些,我创建了漂亮的、人类可读的输出。我想这个话题可以关闭了。 最好的问候!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-03
      • 1970-01-01
      • 2019-07-07
      • 1970-01-01
      相关资源
      最近更新 更多