ЯдроКодаподготовка к экзаменам
Учебная платформа

Загружаем материалы

Подготавливаем материалы и навигацию по разделу.

Процессы 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 исчез.

Что важно запомнить

Частые вопросы

Чем процесс отличается от программы?

Программа — файл и инструкции, процесс — конкретное выполнение с состоянием и ресурсами. Один файл может иметь много процессов.

Что такое zombie?

Это завершившийся процесс, чей родитель ещё не прочитал status. Он почти не использует ресурсы, но массовые zombie указывают на дефект родителя.

Почему /proc/PID внезапно исчез?

Процесс завершился между проверками. Инструмент диагностики должен считать такую гонку допустимой и при необходимости повторно разрешить identity.

Источники