Глубокое погружение в каталог Linux /proc/pid
Что такое прок
Каталог /proc
в системе Linux также является файловой системой, но он отличается от других распространенных файловых систем, таких как /etc
, /var
… proc
— это псевдофайловая система (то есть виртуальная файловая система), в которой хранится ряд специальных файлы текущего состояния работы ядра, с помощью которых пользователи могут просматривать соответствующее системное оборудование и текущую информацию о запущенных процессах и даже изменять рабочее состояние ядра, изменяя некоторые из этих файлов.
Исходя из упомянутой выше особенности файловой системы /proc
, файлы в ней часто называют виртуальными файлами и имеют некоторые уникальные характеристики.
Например, хотя некоторые из этих файлов возвращают много информации при просмотре, размер самого файла отображается как 0 байт. Кроме того, атрибуты времени и даты большинства этих специальных файлов обычно являются текущими системными временем и датой, что связано с их обновлением (сохранением в оперативной памяти) в любое время.
$ ls /proc ... dr-xr-xr-x 4 root root 0 Nov 13 22:13 bus -r--r--r-- 1 root root 0 Nov 17 09:20 cgroups -r--r--r-- 1 root root 0 Nov 17 09:20 cmdline -r--r--r-- 1 root root 0 Nov 17 09:20 consoles -r--r--r-- 1 root root 0 Nov 17 09:20 cpuinfo -r--r--r-- 1 root root 0 Nov 17 09:20 crypto -r--r--r-- 1 root root 0 Nov 17 09:20 devices -r--r--r-- 1 root root 0 Nov 17 09:20 diskstats -r--r--r-- 1 root root 0 Nov 17 09:20 dma dr-xr-xr-x 2 root root 0 Nov 17 09:20 driver -r--r--r-- 1 root root 0 Nov 17 09:20 execdomains -r--r--r-- 1 root root 0 Nov 17 09:20 fb -r--r--r-- 1 root root 0 Nov 17 09:20 filesystems dr-xr-xr-x 8 root root 0 Nov 13 22:13 fs -r--r--r-- 1 root root 0 Nov 17 09:20 interrupts -r--r--r-- 1 root root 0 Nov 17 09:20 iomem -r--r--r-- 1 root root 0 Nov 17 09:20 ioports dr-xr-xr-x 25 root root 0 Nov 13 22:13 irq -r--r--r-- 1 root root 0 Nov 17 09:20 kallsyms ...
Для удобства просмотра и использования эти файлы обычно классифицируются и хранятся в разных каталогах или даже подкаталогах в зависимости от их актуальности. Например, в каталоге /proc/scsi
хранится соответствующая информация обо всех устройствах SCSI в текущей системе, /proc/N
— это важная информация о текущем запущенном процессе системы, где N — идентификатор запущенного процесса.
Большинство виртуальных файлов можно просматривать с помощью команд просмотра файлов, таких как cat
, more
или less
. Некоторая информация о файле может быть четко выражена с первого взгляда, но некоторая информация о файле не очень удобочитаема. Однако эти менее читаемые файлы могут иметь хорошую производительность при просмотре с помощью некоторых команд, таких как free
, lspci
или top
.
Каталог PID в процедуре
Каталог /proc
содержит множество подкаталогов, названных в честь номеров. Эти числа указывают номер процесса, выполняющегося в данный момент в системе, который содержит несколько информационных файлов, связанных с соответствующим процессом.
Давайте подробно рассмотрим один из каталогов процессов:
/proc/‹pid›/arch_status
Новый интерфейс для предоставления информации об архитектуре для данного процесса Linux. Когда CONFIG_PROC_PID_ARCH_STATUS включен, появится этот новый файл arch_status для предоставления любой дополнительной информации об архитектуре для данной задачи.
/proc/‹pid›/attr
Атрибуты безопасности процесса.
- exec: представляет атрибуты, назначенные процессу, это необходимо для поддержки смены ролей/доменов.
- fscreate: представляет атрибуты для назначения файлов, созданных последующими вызовами — mkdir — символическая ссылка
- keycreate: если/когда процесс записывает контекст безопасности в этот файл, все предыдущие ключи будут помечены этим контекстом.
- prev: показывает предыдущие значения /proc/[PID]/attr/current
- sockcreate: если/когда процесс записывает контекст безопасности в этот файл, все ранее созданные сокеты будут помечены этим контекстом
/proc/‹pid›/автогруппа
Членство процесса в автогруппе (группе задач). Например:
$ cat autogroup /autogroup-7430 nice 0
Этот файл также можно использовать для изменения пропускной способности ЦП, выделенной
автогруппе. Это делается путем записи в файл числа из диапазона "хороший"
, чтобы задать хорошее значение автогруппы.
/proc/‹pid›/auxv
Это означает ВСПОМОГАТЕЛЬНЫЙ вектор. Он содержит содержимое информации интерпретатора ELF, переданной процессу во время выполнения.
Значения — это те, которые были переданы операционной системой в качестве информации о запуске динамическому компоновщику. Эти векторы представляют собой механизм для передачи некоторой информации, специфичной для ОС, программному интерпретатору (например, ld) и процессу.
$ hexdump -Cv auxv 00000000 21 00 00 00 00 00 00 00 00 90 dd 50 fd 7f 00 00 |!..........P....| 00000010 10 00 00 00 00 00 00 00 ff fb 8b 17 00 00 00 00 |................| 00000020 06 00 00 00 00 00 00 00 00 10 00 00 00 00 00 00 |................| 00000030 11 00 00 00 00 00 00 00 64 00 00 00 00 00 00 00 |........d.......| 00000040 03 00 00 00 00 00 00 00 40 00 a0 3e 73 55 00 00 |........@..>sU..| 00000050 04 00 00 00 00 00 00 00 38 00 00 00 00 00 00 00 |........8.......| 00000060 05 00 00 00 00 00 00 00 09 00 00 00 00 00 00 00 |................| 00000070 07 00 00 00 00 00 00 00 00 b0 1e bf 60 7f 00 00 |............`...| 00000080 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000090 09 00 00 00 00 00 00 00 50 6d a0 3e 73 55 00 00 |........Pm.>sU..| 000000a0 0b 00 00 00 00 00 00 00 e9 03 00 00 00 00 00 00 |................| 000000b0 0c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000000c0 0d 00 00 00 00 00 00 00 e9 03 00 00 00 00 00 00 |................| 000000d0 0e 00 00 00 00 00 00 00 e9 03 00 00 00 00 00 00 |................| 000000e0 17 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 |................| 000000f0 19 00 00 00 00 00 00 00 e9 3a da 50 fd 7f 00 00 |.........:.P....| 00000100 1a 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 |................| 00000110 1f 00 00 00 00 00 00 00 ea 5f da 50 fd 7f 00 00 |........._.P....| 00000120 0f 00 00 00 00 00 00 00 f9 3a da 50 fd 7f 00 00 |.........:.P....| 00000130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000140
/proc/‹pid›/cgroup
cgroups, к которым принадлежит данный процесс. Файл cgroup
содержит zeor или более строк в виде:
hierarchy_id:controller_list:cgroup_path
Пример переформатированного содержимого этого файла следующий:
$ cat cgroup 11:hugetlb:/ 10:net_cls,net_prio:/ 9:memory:/ 8:devices:/ 7:perf_event:/ 6:blkio:/ 5:freezer:/ 4:cpu,cpuacct,cpuset:/daemons 3:cpuset:/ 2:pids:/ 1:name=systemd:/user.slice/user-1001.slice/session-2239.scope
Используйте 4:cpu,cpuacct,cpuset:/daemons
в качестве примера, поля, разделенные двоеточиями, слева направо:
- Для иерархий cgroups версии 1 это поле содержит уникальный идентификационный номер иерархии, который можно сопоставить с идентификатором иерархии в
/proc/cgroups
. Для иерархии cgroups версии 2 это поле содержит значение 0. - Для иерархий cgroups версии 1 это поле содержит разделенный запятыми список контроллеров, привязанных к иерархии. Для иерархии cgroups версии 2 это поле пусто.
- Это поле содержит путь к контрольной группе в иерархии, к которой принадлежит процесс. Это имя пути относится к точке монтирования иерархии.
/proc/‹pid›/clear_refs
Файл только для записи, доступный для записи только владельцу процесса и присутствующий только в том случае, если параметр конфигурации ядра CONFIG_PROC_PAGE_MONITOR включен.
/proc/‹pid›/cmdline
Завершить команду для запуска текущего процесса, но этот файл в каталоге зомби-процесса не содержит никакой информации. Например, процесс sshd
cmdline будет выглядеть так:
$ cat cmdline /usr/sbin/sshd-D
/proc/‹pid›/comm
Этот файл предоставляет значение comm процесса, т. е. имя команды, связанное с процессом. Различные потоки в одном и том же процессе могут иметь разные значения comm
. Все еще используйте процесс sshd
в качестве примера, его значение comm
выглядит так:
$ cat comm sshd