Что такое procfs

Ответ

Procfs (процесс-файловая система) — это виртуальная файловая система, используемая в операционных системах, подобных Unix (включая Linux), которая предоставляет интерфейс к информации о запущенных процессах и других системных ресурсах ядра. Она не хранится на диске, а динамически генерируется ядром при каждом обращении.

В Go доступ к информации из procfs обычно осуществляется путем чтения файлов из каталога /proc.

Пример чтения информации о текущем процессе (/proc/self/status):

package main

import (
    "fmt"
    "log"
    "os"
)

func main() {
    // /proc/self - это символическая ссылка на каталог текущего процесса (PID)
    data, err := os.ReadFile("/proc/self/status")
    if err != nil {
        log.Fatalf("Ошибка чтения /proc/self/status: %v", err)
    }
    fmt.Println(string(data))

    // Пример чтения информации о CPU
    cpuInfo, err := os.ReadFile("/proc/cpuinfo")
    if err != nil {
        log.Printf("Предупреждение: не удалось прочитать /proc/cpuinfo: %v", err)
    } else {
        fmt.Println("n--- Часть /proc/cpuinfo ---")
        // Выводим только первые 200 символов для краткости
        fmt.Println(string(cpuInfo[:min(len(cpuInfo), 200)]))
    }
}

func min(a, b int) int {
    if a < b {
        return a
    }
    return b
}

Ключевые особенности и применение в Go:

  • Динамическое содержимое: Файлы и каталоги в /proc не являются обычными файлами; их содержимое генерируется ядром в реальном времени при каждом запросе.
  • Информация о процессах: Для каждого запущенного процесса существует подкаталог /proc/<PID>, содержащий файлы с метаданными процесса (например, /proc/<PID>/status для статуса, /proc/<PID>/cmdline для аргументов командной строки, /proc/<PID>/fd для открытых файловых дескрипторов).
  • Системные ресурсы: procfs также предоставляет информацию о системных ресурсах, таких как /proc/cpuinfo (информация о CPU), /proc/meminfo (информация о памяти), /proc/net (сетевая статистика) и другие.
  • Мониторинг и отладка: В Go procfs часто используется для создания инструментов мониторинга производительности, сбора метрик (например, Prometheus-экспортеры) или для отладки приложений, позволяя получать детальную информацию о состоянии системы и процессов.
  • Пакеты: Существуют Go-пакеты, такие как github.com/prometheus/procfs, которые предоставляют удобные абстракции для работы с procfs, упрощая чтение и парсинг данных.

Важно: Доступ к некоторым файлам в /proc может быть ограничен для обычных пользователей из соображений безопасности, требуя прав суперпользователя.