Процессы Linux: PID, ps, top и дерево запуска
Автор: Казачкин Даниил Михайлович · Обновлено
Процесс — запущенный экземпляр программы со своим PID, памятью, открытыми файлами, identity и связью с родителем. Для диагностики важно отличать имя исполняемого файла от конкретного процесса и видеть не только нагрузку, но и состояние.
PID, PPID и команда
ps делает снимок таблицы процессов. Явный формат надёжнее привычного набора колонок конкретной системы.
ps -eo pid,ppid,user,state,etime,%cpu,%mem,comm,args --sort=-%cpu | head
printf 'current shell pid=%s parent=%s\n' "$$" "$PPID"comm — короткое имя, args — командная строка, которую процесс может изменить и которая способна содержать чувствительные аргументы. Секреты не следует передавать в argv.
PPID помогает восстановить причину запуска: worker мог быть дочерним процессом service manager, shell или контейнерного runtime. pstree -p, если установлен, показывает это дерево наглядно; те же связи доступны через колонки ps.
Состояние процесса
В поле state R означает выполняющийся или готовый к CPU процесс, S — прерываемое ожидание, D — непрерываемое ожидание ядра, T — остановку, Z — zombie. Большое число sleeping процессов само по себе не является проблемой.
pid=$$
grep -E '^(Name|State|Pid|PPid|Threads):' "/proc/$pid/status"
ls -l "/proc/$pid/fd" 2>/dev/null | head/proc/PID существует только пока жив процесс и отражает его текущую картину. Между чтениями PID может исчезнуть — это нормальная гонка наблюдения.
Интерактивный обзор через top
top регулярно обновляет CPU, память, load average и задачи. Сначала смотрите на интервал наблюдения и сортировку. Короткий CPU spike может исчезнуть, а накопленное время процесса не равно текущей загрузке. Для воспроизводимого отчёта используйте batch-режим, если он поддерживается: top -b -n 1.
Ошибка и диагностика
Поиск через ps aux | grep app часто находит сам grep и не различает два одноимённых процесса. Используйте pgrep -a -f 'точный шаблон', данные service manager или PID-файл с проверкой start time. Перед вмешательством подтвердите PID, пользователя, PPID и полную команду. Высокий load не означает только CPU: процессы в D могут ждать I/O.
Практика
Запустите sleep 120 &, сохраните PID через $!, найдите его PID/PPID/state/elapsed time в ps и /proc/PID/status. Постройте цепочку родителей до текущего shell. Затем корректно завершите процесс и убедитесь, что каталог в proc исчез.
Что важно запомнить
- PID идентифицирует живой процесс только в данный момент; после завершения номер переиспользуется.
- PPID и дерево запуска часто объясняют, кто должен управлять процессом.
- CPU, память, state и I/O-нужно рассматривать вместе, а не по одной колонке top.
Частые вопросы
Чем процесс отличается от программы?
Программа — файл и инструкции, процесс — конкретное выполнение с состоянием и ресурсами. Один файл может иметь много процессов.
Что такое zombie?
Это завершившийся процесс, чей родитель ещё не прочитал status. Он почти не использует ресурсы, но массовые zombie указывают на дефект родителя.
Почему /proc/PID внезапно исчез?
Процесс завершился между проверками. Инструмент диагностики должен считать такую гонку допустимой и при необходимости повторно разрешить identity.
Связанные исследования
- Firecracker: зачем контейнеру отдельное ядро и какова цена microVM — Исследование Firecracker и собственная модель плотности размещения: границы изоляции, стоимость microVM, холодный старт и ограничения сравнений.