12.1.1. Получение информации о процессе: /proc/PID
Для каждого процесса в системе ядро предоставляет соответствующий каталог по имени /proc/PID, где PID является идентификатором процесса. Внутри этого каталога находятся различные файлы и подкаталоги, содержащие информацию о процессе. Например, просмотрев файлы в каталоге /proc/1, можно получить информацию о процессе init, идентификатор которого всегда имеет значение 1.
Среди файлов в каждом каталоге /proc/PID есть файл по имени status, предоставляющий множество данных о процессе:
$ cat /proc/1/status
Name: init
State: S (sleeping)
Tgid: 1
Pid: 1
PPid: 0
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 256
Groups:
VmPeak: 852 kB
VmSize: 724 kB
VmLck: 0 kB
VmHWM: 288 kB
VmRSS: 288 kB
VmData: 148 kB
VmStk: 88 kB
VmExe: 484 kB
VmLib: 0 kB
VmPTE: 12 kB
Threads: 1
SigQ: 0/3067
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: fffffffe5770d8fc
SigCgt: 00000000280b2603
CapInh: 0000000000000000
CapPrm: 00000000ffffffff
apEff: 00000000fffffeff
CapBnd: 00000000ffffffff
Cpus_allowed: 1
Cpus_allowed_list: 0
Mems_allowed: 1
Mems_allowed_list: 0
voluntary_ctxt_switches: 6998
nonvoluntary_ctxt_switches: 107
Stack usage: 8 kB
Эта информация была получена с использованием ядра версии 2.6.32. Из сопроводительных комментариев с метками «начиная с версии» видно, что формат со временем изменялся и к нему в различных версиях ядра добавлялись новые поля (а иногда поля и удалялись). (Кроме отмеченных выше изменений, привнесенных Linux 2.6, в Linux 2.4 были добавлены поля Tgid, TracerPid, FDSize и Threads.)