Где в linux хранится информация о процессах?devops-39

Виртуальная файловая система /proc

Основное место хранения информации о процессах - виртуальная файловая система /proc, которая:

  • Создается ядром при загрузке
  • Содержит runtime-информацию о системе и процессах
  • Файлы существуют только в памяти (не занимают место на диске)

Структура /proc

/proc/
├── <PID>/          # Директория каждого процесса
├── cpuinfo         # Информация о CPU
├── meminfo         # Информация о памяти
└── ...

Ключевые файлы и директории

1. Общая информация о процессах

/proc/<PID>/status   # Основная информация о процессе
/proc/<PID>/stat     # Детальная статистика (для машинного чтения)
/proc/<PID>/cmdline  # Полная командная строка запуска

2. Использование ресурсов

/proc/<PID>/statm    # Использование памяти
/proc/<PID>/io       # Статистика ввода-вывода
/proc/<PID>/fd/      # Открытые файловые дескрипторы

3. Потоки выполнения

/proc/<PID>/task/    # Директории всех потоков процесса
/proc/<PID>/task/<TID>/status  # Статус конкретного потока

4. Сетевая информация

/proc/<PID>/net/     # Сетевая статистика процесса
/proc/<PID>/fd/      # Сетевые сокеты среди файловых дескрипторов

Системные утилиты для доступа к информации

1. Стандартные команды

ps aux              # Читает /proc для вывода информации
top                 # Интерактивный мониторинг процессов
htop                # Улучшенная версия top

2. Прямой доступ к /proc

cat /proc/<PID>/environ  # Переменные окружения процесса
ls -l /proc/<PID>/fd    # Список открытых файлов

3. Специализированные инструменты

lsof -p <PID>       # Все открытые файлы процесса
pmap <PID>          # Карта памяти процесса
pidstat 1           # Статистика в реальном времени

Особенности работы с /proc

  1. Динамическое обновление:

    • Информация обновляется ядром в реальном времени
    • Разные файлы могут обновляться с разной частотой
  2. Формат данных:

    • Человекочитаемые (status, io)
    • Машиночитаемые (stat, statm)
  3. Безопасность:

    • Видит только свои процессы (кроме root)
    • Некоторые чувствительные данные могут быть скрыты

Примеры практического использования

1. Поиск процесса по порту

ls -l /proc/*/fd/ 2>/dev/null | grep socket

2. Анализ использования памяти

cat /proc/<PID>/status | grep -E 'VmRSS|VmSize'

3. Проверка окружения процесса

tr '\0' '\n' < /proc/<PID>/environ

Альтернативные источники информации

  1. Системные вызовы:

    • getrusage()
    • sysinfo()
  2. Файлы устройств:

    • /dev/mem (прямой доступ к памяти)
    • /dev/kmem (доступ к памяти ядра)
  3. Отладочные интерфейсы:

    • strace - трассировка системных вызовов
    • gdb - отладка процессов

Резюмируем

  1. Основное хранилище:

    • Виртуальная файловая система /proc
    • Динамическая структура по принципу <PID>/
  2. Ключевая информация:

    • Статус и статистика в /proc/<PID>/status, /proc/<PID>/stat
    • Ресурсы в /proc/<PID>/statm, /proc/<PID>/io
    • Потоки в /proc/<PID>/task/
  3. Практическое применение:

    • Диагностика проблем с процессами
    • Оптимизация использования ресурсов
    • Отладка сложных проблем
  4. Инструменты:

    • Прямой доступ к /proc для глубокого анализа
    • Стандартные утилиты (ps, top) для повседневного использования

Понимание организации хранения информации о процессах критически важно для эффективной работы в Linux и диагностики сложных проблем.