В 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. Для соседних задач пригодятся эти разборы:
- Coroutines в Kotlin: первый async-пример
- Inline в Kotlin: что это и когда использовать
- Kotlin Android: первый экран без перегруза
- Kotlin serialization: как настроить JSON на простом примере



