Устройство Linux / Объяснение

/proc/self: какой процесс вы наблюдаете при чтении

Разберите различие /proc/self и /proc/$$, выберите PID оболочки и получите повторяемое наблюдение без случайной подмены процесса утилитой чтения.

Средний8 минОбщие принципы LinuxLinux · понятия и интерфейсыBash · pipeline semantics

Почему в отчёте появился cat вместо Bash

Вы открыли сведения о процессе, а в поле имени увидели утилиту, которой читаете файл. Проблема может быть в выборе адресата наблюдения. Путь /proc/self удобен для программы, которая исследует себя; интерактивная оболочка обычно запускает для чтения другую программу.

Представьте проверку двух соседних окон терминала. Нужно выяснить PID каждой оболочки, а затем сравнить их состояние. Если каждый раз запускать новую команду с self, результаты будут относиться к новым читателям. Сначала выберите объект, затем собирайте его поля.

Ссылка self и подстановка оболочки

Ядро разрешает /proc/self относительно процесса, обращающегося к этому пути. Поэтому cat /proc/self/status обычно показывает сведения самого cat. В выражении /proc/$$/status число подставляет Bash до запуска cat: читатель получает уже выбранный путь.

В обычной интерактивной Bash переменная $$ обозначает PID оболочки. У вложенных конструкций есть нюанс: в подоболочке $$ сохраняется, тогда как BASHPID отражает текущий процесс Bash. Для первого опыта выполняйте строки непосредственно в открытой оболочке, без обёртки в скобки.

Зафиксируйте PID текущей оболочки

Выполните три строки в одной интерактивной Bash. Переменная task_pid создаётся только в этой оболочке и нужна для одинакового адресата обоих чтений.

Локальная Linux-система
task_pid=$$
printf "Наблюдаемый PID: %s\n" "$task_pid"
grep -E "^(Name|Pid|PPid|State):" "/proc/$task_pid/status"

Сверьте адресат и результат

Строка Pid должна совпасть с напечатанным числом. Name помогает проверить, что выбран ожидаемый процесс, но не заменяет PID. Во втором окне повторите опыт: номер оболочки будет другим, хотя имя программы может совпадать.

Теперь отдельно прочитайте cat /proc/self/status и найдите Name. Отличие не доказывает, что первый процесс изменил имя. Вы изменили способ выбора адресата. В записанном отчёте полезно хранить сам путь вместе со временем наблюдения, чтобы позднее понимать происхождение цифр.

Проверьте своё рассуждение

Задача: два последовательных чтения /proc/self/status дали разные PID. Можно ли заключить, что Bash перезапустилась?

Нет. Чтения могли выполнить два новых процесса cat. Проверять перезапуск выбранной оболочки нужно по сведениям именно о ней и моменту запуска, а не по self дочерних утилит.

PID не является вечным идентификатором

После завершения процесса его каталог исчезает, а номер может быть выдан заново. При длительном наблюдении проверяйте идентичность процесса повторно. Скрытые каталоги procfs и ограничения контейнера также меняют доступную картину; отсутствие пути не следует автоматически трактовать как сбой всей системы.

Технические источники

Использованы для проверки поведения. Объяснения и учебные сценарии созданы для проекта.

  • Linux man-pages — proc_self(5)
  • Linux man-pages — proc_pid(5)
  • Linux man-pages — bash(1)

Проверка текста: 2026-09-11. Нативное исполнение на всей матрице дистрибутивов ещё не подтверждено.

Нужны собственная Linux-система, смонтированный procfs и Bash. Доступность полей зависит от ядра, его конфигурации, прав и пространств имён. Примеры только читают диагностические интерфейсы; браузерный симулятор их не реализует.

От материала к практике

Выберите следующую тему в каталоге Linux или проверьте знакомые команды в учебном терминале.

Поиск по Linux

Поиск локальный. ↑ ↓ — перейти к результату, Enter — открыть.

Навигация