Процесс (process) — экземпляр программы, загруженный в оперативную память и выполняемый операционной системой. Каждый процесс изолирован: он имеет собственное виртуальное адресное пространство, набор файловых дескрипторов, переменные окружения и уникальный числовой идентификатор — PID (Process ID).
Как создаётся процесс
В Unix-подобных системах новый процесс создаётся системным вызовом fork(): дочерний процесс получает полную копию адресного пространства родителя (copy-on-write). Затем дочерний процесс может заменить себя другой программой через exec(). Первый процесс в системе — init (PID 1) или systemd — прародитель всех остальных.
Дерево процессов можно просмотреть командой pstree. Каждый процесс кроме PID знает PPID — PID своего родителя.
Состояния процесса
- Running (R)
- Процесс выполняется на CPU или стоит в очереди планировщика.
- Sleeping (S/D)
- Interruptible sleep (S) — ожидает события (ввод-вывод, сигнал). Uninterruptible sleep (D) — заблокирован на системном вызове, нельзя прервать даже SIGKILL.
- Stopped (T)
- Приостановлен сигналом SIGSTOP. Возобновляется SIGCONT.
- Zombie (Z)
- Процесс завершился, но родитель ещё не вызвал wait() для считывания кода возврата. Запись в таблице процессов сохраняется. Zombie не потребляет RAM, но занимает PID.
- Orphan (осиротевший)
- Процесс, чей родитель завершился. Автоматически усыновляется init (PID 1), который вызовет wait() и очистит записи.
История
Понятие процесса сформировалось в 1960-х с появлением мультипрограммных ОС. В Unix (1969) модель fork/exec/wait стала основой архитектуры. В 1973 году появилась концепция PID. Стандарт POSIX (1988) закрепил интерфейсы управления процессами, которые используются без изменений по сей день. В Linux 2.6 (2003) добавлены контрольные группы (cgroups) — механизм ограничения ресурсов для групп процессов.
Управление процессами
Основные команды:
ps aux— список всех процессов с PID, CPU%, MEM%.top/htop— интерактивный мониторинг в реальном времени.kill -SIGTERM [PID]— мягкое завершение (процесс может перехватить и завершиться корректно).kill -SIGKILL [PID]— принудительное завершение, нельзя перехватить.nice/renice— установка приоритета CPU (-20 до +19).
Процессы в контексте хостинга
На виртуальном хостинге число одновременных процессов ограничено. На VDS и VPS лимиты задаются через cgroups. Демоны веб-серверов (nginx, Apache) и серверов приложений (Gunicorn, PHP-FPM) запускают несколько воркер-процессов для параллельной обработки запросов. При нехватке памяти OOM Killer выбирает процессы для принудительного завершения.
Процессы и потоки
Процесс может содержать несколько потоков (threads), совместно использующих адресное пространство. Поток создаётся быстрее и дешевле, чем процесс. Многопоточность применяют там, где нужен общий доступ к данным; многопроцессность — там, где важна изоляция (например, PHP-FPM с одним воркером на запрос предотвращает утечки состояния между запросами).