Процесс — это экземпляр выполняемой программы, обладающий собственным контекстом выполнения и изолированным набором ресурсов.

В Linux процесс выступает базовой единицей изоляции и управления: именно на уровне процессов ядро распределяет ресурсы, применяет права доступа и обеспечивает независимость выполнения.

Основные понятия

Процесс как сущность
Процесс — это не файл программы на диске, а её «живая» форма в памяти:

  • код загружен в память
  • есть текущее состояние выполнения
  • выделены ресурсы (CPU, память, I/O)

Один и тот же бинарник может порождать множество процессов.

Программа vs процесс

  • Программа — статический набор инструкций (файл на диске)
  • Процесс — динамическое выполнение программы

Пример: один бинарник может быть запущен несколько раз → несколько независимых процессов.

Изоляция Каждый процесс изолирован:

  • собственное адресное пространство
  • собственные файловые дескрипторы
  • собственный контекст выполнения

Процессы не имеют прямого доступа к памяти друг друга (без явных механизмов IPC).

Ресурсы процесса Процессу принадлежат:

  • память (виртуальное адресное пространство)
  • процессорное время
  • файловые дескрипторы
  • сетевые соединения
  • права доступа (UID, GID, capabilities)

Ядро отслеживает и ограничивает эти ресурсы.

Идентичность процесса Основные идентификаторы:

  • PID — уникальный идентификатор процесса
  • PPID — идентификатор родителя

Дополнительно:

  • thread group ID
  • session ID
  • process group ID

Используются для управления и сигналов.

Жизненный цикл процесса

  1. Создание (fork() / clone())
  2. Инициализация (часто через exec())
  3. Выполнение (running / waiting)
  4. Завершение (exit())
  5. Состояние zombie до wait() со стороны родителя

Жизненный цикл управляется ядром.

Контекст процесса Процесс всегда имеет:

  • текущее состояние CPU
  • стек вызовов
  • карту памяти
  • открытые ресурсы

Это позволяет приостанавливать и возобновлять выполнение без потери состояния.

Взаимодействие процессов (IPC) Процессы взаимодействуют только через контролируемые механизмы:

  • пайпы (pipes)
  • сокеты (sockets)
  • разделяемая память (shared memory)
  • сигналы (signals)

Это сохраняет изоляцию и управляемость.

Процесс как единица планирования В Linux планировщик работает с задачами (task), которые представляют процессы и потоки. Процесс:

  • может выполняться
  • может ожидать ресурсы
  • конкурирует за CPU с другими процессами

Практический смысл

  • Процесс — это граница отказа: сбой внутри процесса не должен ломать другие.
  • Процесс — это граница безопасности: права применяются именно к нему.
  • Процесс — это единица наблюдаемости: мониторинг, логирование, метрики.
  • Процесс — это контейнер ресурсов: всё, чем владеет программа, привязано к процессу.

В инженерной практике процесс удобно рассматривать как изолированный runtime-контейнер для выполнения программы, управляемый ядром через строго определённые интерфейсы.