Процесс — это экземпляр выполняемой программы, обладающий собственным контекстом выполнения и изолированным набором ресурсов.
В Linux процесс выступает базовой единицей изоляции и управления: именно на уровне процессов ядро распределяет ресурсы, применяет права доступа и обеспечивает независимость выполнения.
Основные понятия
Процесс как сущность
Процесс — это не файл программы на диске, а её «живая» форма в памяти:
- код загружен в память
- есть текущее состояние выполнения
- выделены ресурсы (CPU, память, I/O)
Один и тот же бинарник может порождать множество процессов.
Программа vs процесс
- Программа — статический набор инструкций (файл на диске)
- Процесс — динамическое выполнение программы
Пример: один бинарник может быть запущен несколько раз → несколько независимых процессов.
Изоляция Каждый процесс изолирован:
- собственное адресное пространство
- собственные файловые дескрипторы
- собственный контекст выполнения
Процессы не имеют прямого доступа к памяти друг друга (без явных механизмов IPC).
Ресурсы процесса Процессу принадлежат:
- память (виртуальное адресное пространство)
- процессорное время
- файловые дескрипторы
- сетевые соединения
- права доступа (UID, GID, capabilities)
Ядро отслеживает и ограничивает эти ресурсы.
Идентичность процесса Основные идентификаторы:
- PID — уникальный идентификатор процесса
- PPID — идентификатор родителя
Дополнительно:
- thread group ID
- session ID
- process group ID
Используются для управления и сигналов.
Жизненный цикл процесса
- Создание (
fork()/clone()) - Инициализация (часто через
exec()) - Выполнение (running / waiting)
- Завершение (
exit()) - Состояние zombie до
wait()со стороны родителя
Жизненный цикл управляется ядром.
Контекст процесса Процесс всегда имеет:
- текущее состояние CPU
- стек вызовов
- карту памяти
- открытые ресурсы
Это позволяет приостанавливать и возобновлять выполнение без потери состояния.
Взаимодействие процессов (IPC) Процессы взаимодействуют только через контролируемые механизмы:
- пайпы (pipes)
- сокеты (sockets)
- разделяемая память (shared memory)
- сигналы (signals)
Это сохраняет изоляцию и управляемость.
Процесс как единица планирования В Linux планировщик работает с задачами (task), которые представляют процессы и потоки. Процесс:
- может выполняться
- может ожидать ресурсы
- конкурирует за CPU с другими процессами
Практический смысл
- Процесс — это граница отказа: сбой внутри процесса не должен ломать другие.
- Процесс — это граница безопасности: права применяются именно к нему.
- Процесс — это единица наблюдаемости: мониторинг, логирование, метрики.
- Процесс — это контейнер ресурсов: всё, чем владеет программа, привязано к процессу.
В инженерной практике процесс удобно рассматривать как изолированный runtime-контейнер для выполнения программы, управляемый ядром через строго определённые интерфейсы.