Как узнать название процессора в Kotlin: JVM, Windows, macOS и Linux

В Kotlin на JVM нет одной стандартной функции, которая вернет красивое название процессора вроде Apple M3, Intel Core i5 или AMD Ryzen 7. Стандартная библиотека и JVM дают базовые сведения: архитектуру системы и количество доступных процессоров. Полное имя CPU обычно берут из операционной системы

Быстрый рабочий подход такой:

  • для архитектуры используйте System.getProperty("os.arch")
  • для количества ядер используйте Runtime.getRuntime().availableProcessors()
  • для названия процессора выполните системную команду под Windows, macOS или Linux

Минимальный пример без системных команд

Этот вариант работает почти везде, где запускается Kotlin на JVM

fun main() {
    val osName = System.getProperty("os.name")
    val osArch = System.getProperty("os.arch")
    val cores = Runtime.getRuntime().availableProcessors()

    println("ОС: $osName")
    println("Архитектура: $osArch")
    println("Доступных процессоров: $cores")
}

Пример вывода:

ОС: Mac OS X
Архитектура: aarch64
Доступных процессоров: 10

Это не маркетинговое имя процессора, но часто именно этих данных хватает: понять, где код запущен, какая архитектура у машины и сколько потоков можно использовать для параллельной задачи

Как получить название процессора через команду ОС

Если нужно именно название, придется спросить операционную систему. Ниже пример для JVM-приложения, которое выбирает команду по ОС

import java.io.BufferedReader
import java.io.InputStreamReader

fun runCommand(command: List<String>): String {
    val process = ProcessBuilder(command)
        .redirectErrorStream(true)
        .start()

    return BufferedReader(InputStreamReader(process.inputStream))
        .readText()
        .trim()
}

fun cpuName(): String {
    val os = System.getProperty("os.name").lowercase()

    return when {
        os.contains("win") -> runCommand(
            listOf("powershell", "-Command", "(Get-CimInstance Win32_Processor).Name")
        )
        os.contains("mac") -> runCommand(
            listOf("sysctl", "-n", "machdep.cpu.brand_string")
        )
        else -> runCommand(
            listOf("sh", "-c", "lscpu | grep 'Model name' | sed 's/Model name::space:*//'")
        )
    }
}

fun main() {
    println("Процессор: ${cpuName()}")
}

На Windows код вызывает PowerShell, на macOS — sysctl, на Linux — lscpu. Если команда недоступна, пример нужно адаптировать под конкретную систему

Что важно понимать

os.arch показывает архитектуру, а не модель процессора. Например, x86_64, amd64 или aarch64 говорят о типе платформы, но не называют конкретный чип

availableProcessors() показывает число процессоров, доступных JVM. В контейнере или виртуальной машине это может быть меньше, чем физически есть на компьютере

Системные команды зависят от ОС. Поэтому для учебного проекта это нормально, а для библиотечного кода лучше явно обработать ошибки и вернуть понятное сообщение

Как проверить на своем компьютере

Создайте файл CpuInfo.kt, вставьте код и запустите его в IntelliJ IDEA или через Gradle. Если запускаете через командную строку, сначала убедитесь, что Kotlin/JDK настроены

Ожидаемый результат: программа печатает хотя бы архитектуру и количество процессоров. Если системная команда с названием CPU не сработала, начните с базового примера без ProcessBuilder

Частые ошибки

PowerShell не найден

На Windows команда должна запускаться в обычной системе с PowerShell. Если приложение работает в ограниченной среде, системные команды могут быть запрещены

На Linux пустой вывод

Не во всех дистрибутивах есть lscpu. Попробуйте прочитать /proc/cpuinfo или установить пакет util-linux

В Android это не работает как на компьютере

Android-приложение — отдельная среда. Для модели устройства обычно используют android.os.Build, а не команды настольной ОС

Что почитать дальше по Kotlin

Если нужен общий маршрут по теме, откройте рубрику Kotlin. Для соседних задач пригодятся эти разборы:

Оцените статью
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x