3.3.5.2.1 Получение сведений о процессах в РЕД ОС
Содержимое каталога /proc
Назначение файлов в каталогах процессов /proc/<PID>
Структура каталога /proc/sys
Процесс — это экземпляр запущенной программы. Каждый раз, когда в терминале выполняется какая-либо команда, система создает новый процесс. Процессы в операционной системе имеют числовой идентификатор, называемый PID.
Программы пространства пользователя в РЕД ОС не могут обращаться к ядру системы напрямую. Однако для получения информации от ядра были созданы некоторые специальные каталоги, с помощью которых любая программа или пользователь может получить данные о состоянии компьютера и ядра – это каталоги /proc и /sys.
Вы можете подробнее ознакомиться с назначением каталога /proc и файловой системы procfs, просмотрев наши обучающие видео:
на RuTube — Файловая система procfs;
в Яндекс.Дзен — Файловая система procfs.
в VK Видео — Файловая система procfs.
На наших каналах вы также сможете найти много другой полезной информации.
С дополнительной информацией о работе с процессами можно ознакомиться в нашей статье «Процессы в РЕД ОС».
В рамках текущей статьи будет рассмотрен механизм получения сведений о процессах, на котором основаны все программы, позволяющие работать с процессами – работа с каталогом /proc.
В каталог /proc монтируется специальная файловая система procfs.
procfs — специальная файловая система, используемая в UNIX-подобных операционных системах, позволяющая получить доступ к информации из ядра о системных процессах, необходима для выполнения таких команд, как ps
, w
, top
.
На самом деле каталог /proc – это не обычный каталог. Все подкаталоги, файлы и хранящаяся в них информация генерируются ядром «на лету», как только пользователь ее запрашивает. Работа построена таким образом, что пользователь может не заметить разницы между обычной файловой системой и proc, если откроет ее с помощью файлового менеджера.
Каталог /proc содержит файлы нулевого размера, у каждого файла отображается текущая дата создания. Например, файл /proc/meminfo будет содержать разные данные при каждом открытии, поскольку использование памяти постоянно изменяется.
С помощью такого механизма разработчики придерживаются главной концепции Unix: «Всё – есть файл». Все файлы доступны для изменения любым редактором, и все они представлены в простом текстовом формате, но для того чтобы проанализировать весь каталог, необходимы права суперпользователя (root).
Большинство файлов в каталоге /proc доступны только для чтения, с их помощью можно только просмотреть информацию. Однако существуют и доступные для записи файлы, в частности – каталог /proc/sys, с помощью которого можно настраивать различные параметры ядра.
Содержимое каталога /proc
/proc/buddyinfo – файл отображает информацию о фрагментации памяти в ядре системы. Чаще всего используется для диагностики проблем с фрагментацией памяти.
cat /proc/buddyinfo
Node 0, zone DMA 3 2 3 4 4 4 4 2 3 1 0 Node 0, zone DMA32 3091 2531 1857 728 273 119 59 25 6 3 8
/proc/cmdline – файл отображает информацию о параметрах, которые были указаны в строке запуска ядра загрузчиком grub. Может быть полезно при поиске и устранении проблем с загрузкой ядра или в случае необходимости выявления файла, использованного для загрузки.
cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-6.6.51-1.red80.x86_64 root=UUID=5b25f5f1-2ee8-4ee2-8b0d-524f3cde5e1e ro resume=UUID=cd77454c-60a6-4495-98e2-568a5279db77 rhgb quiet
/proc/consoles – файл отображает информацию о зарегистрированных в ядре символических устройствах для системной консоли /dev/console.
cat /proc/consoles
tty0 -WU (EC p ) 4:2
/proc/cpuinfo – файл отображает очень подробную информацию о процессоре. Здесь можно просмотреть производителя, количество ядер, объем кеша, активные ядра, частоту, поддерживаемые расширения и многое другое. Ту же информацию можно получить с помощью специальных команд, однако все скрипты, выводящие информацию о процессоре, берут ее из каталога /proc.
cat /proc/cpuinfoprocessor : 0 vendor_id : GenuineIntel cpu family : 6 model : 158 model name : Intel(R) Core(TM) i5-9400 CPU @ 2.90GHz stepping : 13 microcode : 0xea cpu MHz : 2903.998 cache size : 16384 KB physical id : 0 siblings : 1 core id : 0 cpu cores : 1 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 22 wp : yes [...]
/proc/devices – файл отображает информацию о различных блочных и символических устройствах, подключенных к системе, кроме тех, для которых не загружены модули ядра. Устройства разделены на символические и блочные. У символических устройств нет буфера хранения, поэтому они отправляют ядру данные определенного размера. Блочные устройства имеют буфер для данных и предназначены для сохранения информации, например, на жесткие диски.
cat /proc/devicesCharacter devices: 1 mem 2 pty 3 ttyp 4 /dev/vc/0 4 tty 4 ttyS 5 /dev/tty 5 /dev/console 5 /dev/ptmx 7 vcs 10 misc 13 input 14 sound 21 sg 29 fb 116 alsa 128 ptm 136 pts 180 usb 188 ttyUSB [...]
/proc/fb – файл отображает информацию об устройствах фреймбуфера (экраны), а также используемые графические драйверы. Файл является одним из способов просмотра используемого драйвера видеокарты.
cat /proc/fb
0 qxldrmfb
/proc/filesystems – файл содержит список файловых систем, которые на данный момент поддерживаются ядром. Значение nodev показывает, что это файловая система специального назначения, и она не используется для хранения данных на носителях.
cat /proc/filesystems
nodev sysfs nodev tmpfs nodev bdev nodev proc nodev cgroup nodev cgroup2 nodev cpuset nodev devtmpfs nodev configfs nodev debugfs nodev tracefs nodev securityfs nodev sockfs nodev bpf nodev pipefs nodev ramfs nodev hugetlbfs nodev devpts ext3 ext2 ext4 [...]
/proc/kcore – это все содержимое оперативной памяти, представленное в одном файле. В отличие от других у этого файла есть размер – объем ОЗУ плюс 4 Кб. Для доступа к файлу необходимы права суперпользователя (root). Перед работой с файлом его необходимо скопировать в другой каталог, а затем выполнять требуемые действия.
cat /proc/kcore
[...] PAGESIZE=4096 SYMBOL(init_uts_ns)=ffffffff862b4fe0 OFFSET(uts_namespace.name)=0 SYMBOL(node_online_map)=ffffffff8631a3c0 SYMBOL(swapper_pg_dir)=ffffffff8601c000 SYMBOL(_stext)=ffffffff84000000 SYMBOL(vmap_area_list)=ffffffff861c8f30 SYMBOL(mem_section)=ffff9c9f7ffb1000 LENGTH(mem_section)=2048 SIZE(mem_section)=16 OFFSET(mem_section.section_mem_map)=0 NUMBER(SECTION_SIZE_BITS)=27 NUMBER(MAX_PHYSMEM_BITS)=46 SIZE(page)=64 SIZE(pglist_data)=175424 SIZE(zone)=1728 SIZE(free_area)=104 SIZE(list_head)=16 SIZE(nodemask_t)=128 OFFSET(page.flags)=0 OFFSET(page._refcount)=52 [...]
/proc/kmsg – файл накапливает и сохраняет сообщения ядра. Сообщения можно посмотреть также с помощью утилиты dmesg. Для доступа к файлу потребуются права суперпользователя (root).
cat /proc/kmsg
[...] <6>[ 1.469422] Freeing unused decrypted memory: 2028K <6>[ 1.471034] Freeing unused kernel image (initmem) memory: 4392K <6>[ 1.471067] Write protecting the kernel read-only data: 32768k <6>[ 1.472590] Freeing unused kernel image (rodata/data gap) memory: 1548K <6>[ 1.504398] x86/mm: Checked W+X mappings: passed, no W+X pages found. <6>[ 1.504415] rodata_test: all tests were successful <6>[ 1.504430] Run /init as init process <7>[ 1.504434] with arguments: <7>[ 1.504436] /init <7>[ 1.504437] rhgb <7>[ 1.504438] with environment: <7>[ 1.504439] HOME=/ <7>[ 1.504440] TERM=linux <7>[ 1.504441] BOOT_IMAGE=/vmlinuz-6.6.51-1.red80.x86_64 [...]
/proc/loadavg – файл позволяет оценить среднюю нагрузку на систему. Первые три цифры показывают нагрузку на процессор в данный момент времени, 5 минут назад и 15 минут назад, следующие два столбца показывают количество активных процессов и общее количество запущенных процессов. Последняя цифра — это идентификатор последнего процесса (PID).
cat /proc/loadavg
0.04 0.19 0.56 1/487 5764
/proc/meminfo – файл отображает всю доступную информацию об оперативной памяти и пространстве подкачки.
cat /proc/meminfo
MemTotal: 2016164 kB MemFree: 88360 kB MemAvailable: 181764 kB Buffers: 7920 kB Cached: 206472 kB SwapCached: 6240 kB Active: 972320 kB Inactive: 595760 kB Active(anon): 814268 kB Inactive(anon): 553056 kB Active(file): 158052 kB Inactive(file): 42704 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 4162552 kB SwapFree: 3227384 kB Zswap: 0 kB Zswapped: 0 kB Dirty: 0 kB Writeback: 0 kB AnonPages: 1350020 kB Mapped: 95860 kB Shmem: 13636 kB
/proc/modules – файл содержит список всех загруженных модулей ядра. Ту же информацию можно увидеть, выполнив команду lsmod.
cat /proc/modules
uinput 20480 1 - Live 0x0000000000000000 snd_seq_dummy 12288 0 - Live 0x0000000000000000 snd_hrtimer 12288 1 - Live 0x0000000000000000 qrtr 49152 2 - Live 0x0000000000000000 rfkill 28672 3 - Live 0x0000000000000000 sunrpc 839680 1 - Live 0x0000000000000000 snd_hda_codec_generic 110592 1 - Live 0x0000000000000000 ledtrig_audio 12288 1 snd_hda_codec_generic, Live 0x0000000000000000 snd_hda_intel 61440 2 - Live 0x0000000000000000 intel_rapl_msr 20480 0 - Live 0x0000000000000000 intel_rapl_common 36864 1 intel_rapl_msr, Live 0x0000000000000000 snd_intel_dspcfg 36864 1 snd_hda_intel, Live 0x0000000000000000 snd_intel_sdw_acpi 16384 1 snd_intel_dspcfg, Live 0x0000000000000000 snd_hda_codec 204800 2 snd_hda_codec_generic,snd_hda_intel, Live 0x0000000000000000 snd_hda_core 135168 3 snd_hda_codec_generic,snd_hda_intel,snd_hda_codec, Live 0x0000000000000000 kvm_intel 409600 0 - Live 0x0000000000000000 snd_hwdep 16384 1 snd_hda_codec, Live 0x0000000000000000 kvm 1302528 1 kvm_intel, Live 0x0000000000000000 [...]
/proc/mounts – файл содержит все точки монтирования и все подключенные файловые системы.
cat /proc/mountsproc /proc proc rw,nosuid,nodev,noexec,relatime 0 0 sysfs /sys sysfs rw,seclabel,nosuid,nodev,noexec,relatime 0 0 devtmpfs /dev devtmpfs rw,seclabel,nosuid,size=4096k,nr_inodes=1048576,mode=755,inode64 0 0 securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0 tmpfs /dev/shm tmpfs rw,seclabel,nosuid,nodev,inode64 0 0 devpts /dev/pts devpts rw,seclabel,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0 tmpfs /run tmpfs rw,seclabel,nosuid,nodev,size=403236k,nr_inodes=819200,mode=755,inode64 0 0 cgroup2 /sys/fs/cgroup cgroup2 rw,seclabel,nosuid,nodev,noexec,relatime,nsdelegate,memory_recursiveprot 0 0 pstore /sys/fs/pstore pstore rw,seclabel,nosuid,nodev,noexec,relatime 0 0 bpf /sys/fs/bpf bpf rw,nosuid,nodev,noexec,relatime,mode=700 0 0 configfs /sys/kernel/config configfs rw,nosuid,nodev,noexec,relatime 0 0 /dev/sda4 / ext4 rw,seclabel,relatime 0 0 [...]
/proc/partitions – в файле отображены все подключенные к системе разделы жестких дисков или других запоминающих устройств.
cat /proc/partitions
major minor #blocks name 8 0 41943040 sda 8 1 1024 sda1 8 2 1048576 sda2 8 3 2147328 sda3 8 4 38744064 sda4 11 0 1048575 sr0 252 0 2015232 zram0
Назначение файлов в каталогах процессов /proc/<PID>
Для отображения файлов какого-либо процесса следует открыть каталог с номером необходимого процесса. В каждом каталоге более 50 файлов.
Далее будет рассмотрено назначение некоторых файлов:
cmdline – содержит команду, с помощью которой был запущен процесс, а также переданные ей параметры;
cwd – символическая ссылка на текущий рабочий каталог процесса;
exe – ссылка на исполняемый файл;
root – ссылка на каталог суперпользователя (root);
environ – переменные окружения, доступные для процесса;
fd – содержит файловые дескрипторы, файлы и устройства, которые использует процесс;
maps, statm, и mem – информация о памяти процесса;
stat, status – состояние процесса.
Структура каталога /proc/sys
Каталог /proc/sys содержит файлы с параметрами ядра. Файлы доступны не только для чтения, но и для редактирования с целью передачи ядру ОС новых значений параметров.
Каталог содержит подкаталоги, разделённые по типам хранимых параметров. Далее будет рассмотрено назначение некоторых файлов:
debug – содержит отладочную информацию, она будет полезна для разработчиков ядра;
dev – содержит параметры различных устройств, подключенных к системе;
fs – содержит всю информацию о файловой системе;
kernel – позволяет напрямую настраивать ядро;
net – позволяет настраивать различные параметры сети;
vm – содержит ряд файлов и подкаталогов, соответствующих переменным ядра с подсистемой виртуальной памяти.
Более подробную информацию о каталоге /proc также можно просмотреть, выполнив команду:
man proc
Дата последнего изменения: 16.01.2025
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.