/proc/self: какой процесс вы наблюдаете при чтении
Разберите различие /proc/self и /proc/$$, выберите PID оболочки и получите повторяемое наблюдение без случайной подмены процесса утилитой чтения.
Почему в отчёте появился 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 создаётся только в этой оболочке и нужна для одинакового адресата обоих чтений.
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 или проверьте знакомые команды в учебном терминале.