Инструменты пользователя

Инструменты сайта


procfs

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

procfs [2015/07/17 13:31] (текущий)
admin создано
Строка 1: Строка 1:
 +====== /proc: Файловая система для процессов ProcFS ======
 +**Процессы**:​ В любое время в Linux'​е одновременно запущено множество процессов. Некоторые из них, такие как оконные менеджеры,​ email-клиенты и Web-браузеры,​ видны конечному пользователю. Другие,​ вроде серверов и вспомогательных процессов,​ в глаза не бросаются,​ но запущены в фоновом режиме,​ выполняя задания,​ не требующие каких-либо действий со стороны пользователя. Запуск "ps -ef" в shell'​е выведет список всех запущенных на данный момент процессов. А выглядеть будет примерно так:
 +<​file>​
 +$ ps -ef
 +UID        PID  PPID  C STIME TTY          TIME CMD
 +root         ​1 ​    ​0 ​ 0 11:08 ?        00:00:04 init
 +root         ​2 ​    ​1 ​ 0 11:08 ?        00:00:00 [keventd]
 +root         ​3 ​    ​0 ​ 0 11:08 ?        00:00:00 [ksoftirqd_CPU0]
 +root         ​4 ​    ​0 ​ 0 11:08 ?        00:00:00 [kswapd]
 +root         ​5 ​    ​0 ​ 0 11:08 ?        00:00:00 [bdflush]
 +root         ​6 ​    ​0 ​ 0 11:08 ?        00:00:00 [kupdated]
 +root         ​8 ​    ​1 ​ 0 11:08 ?        00:00:00 [kjournald]
 +root        86     ​1 ​ 0 11:08 ?        00:00:00 /​sbin/​devfsd /dev
 +root       ​165 ​    ​1 ​ 0 11:09 ?        00:00:00 [kjournald]
 +root       ​168 ​    ​1 ​ 0 11:09 ?        00:00:00 [khubd]
 +root       ​294 ​    ​1 ​ 0 11:09 ?        00:00:00 [kapmd]
 +root       ​515 ​    ​1 ​ 0 11:09 ?        00:00:00 metalog [MASTER]
 +root       ​521 ​  ​515 ​ 0 11:09 ?        00:00:00 metalog [KERNEL]
 +root       ​531 ​    ​1 ​ 0 11:09 ?        00:00:00 /​sbin/​dhcpcd eth0 /​etc/​X11/​fs/​config -droppriv -user xfs
 +root       ​572 ​    ​1 ​ 0 11:09 ?        00:00:00 /​usr/​kde/​2/​bin/​kdm
 +root       ​593 ​  ​572 ​ 2 11:09 ?        00:04:27 /​usr/​X11R6/​bin/​X -auth /​var/​lib/​kdm/​authfiles/​A:​0-25pIgI
 +root       ​644 ​    ​1 ​ 0 11:09 vc/1     ​00:​00:​00 /​sbin/​agetty 38400 tty1 linux
 +root      1045   ​572 ​ 0 12:16 ?        00:00:00 -:0
 +mbutcher ​ 1062  1045  0 12:16 ?        00:00:00 /bin/sh /​etc/​X11/​Sessions/​kde-2.2.2
 +mbutcher ​ 1091  1062  0 12:16 ?        00:00:00 /bin/bash --login /​usr/​kde/​2/​bin/​startkde
 +mbutcher ​ 1132     ​1 ​ 0 12:16 ?        00:00:00 kdeinit: Running…
 +mbutcher ​ 1157  1132  0 12:16 ?        00:00:01 kdeinit: kwin
 +mbutcher ​ 1159     ​1 ​ 0 12:16 ?        00:00:07 kdeinit: kdesktop
 +mbutcher ​ 1168     ​1 ​ 0 12:16 ?        00:00:00 kdeinit: kwrited
 +mbutcher ​ 1171  1168  0 12:16 pty/​s0 ​  ​00:​00:​00 /bin/cat
 +mbutcher ​ 1173     ​1 ​ 0 12:16 ?        00:00:00 alarmd
 +mbutcher ​ 1207  1132  0 12:23 ?        00:00:08 kdeinit: konsole -icon konsole -miniicon konsole
 +mbutcher ​ 1219  1207  0 12:23 pty/​s2 ​  ​00:​00:​00 /bin/bash
 +mbutcher ​ 1309  1260  0 13:48 pty/​s3 ​  ​00:​00:​01 vi dev-and-proc.html
 +root      1314  1220  0 14:03 pty/​s2 ​  ​00:​00:​00 ps -ef
 +</​file>​
 +Многие из задач в выводе ps являются процессами,​ работающими в фоновом режиме. Те, что взяты в квадратные скобочки — процессы ядра. Только некоторые,​ вроде процессов kde и записей в конце списка,​ являются процессами,​ с которыми я взаимодействую напрямую.
  
 +Для управления системой ядро должно хранить информацию о каждом запущенном процессе,​ включая само себя. Также должна быть возможность просмотра сведений о запущенных приложениях пользовательского уровня (хорошим примером служит "​ps",​ а также "​top"​). В файловой системе /proc ядро и хранит информацию о процессах.
 +
 +Как и DevFS, /proc хранится в памяти,​ а не на диске. Если вы посмотрите в файл /​proc/​mounts (в котором приводится список всех примонтированных файловых систем),​ то увидите строку вроде этой:
 +
 +<​file>​
 +proc /proc proc rw 0 0
 +</​file>​
 +/proc контролируется ядром, у этой файловой системы нет «под собой» какого-либо устройства. Так как в ней в основном содержится информация,​ управляемая ядром, наиболее логичным место для хранения такой информации является память,​ также контролируемая ядром.
 +
 +Информация о запущенных процессах:​ Чтобы хранить информацию обо всех процессах,​ ядро присваивает каждому из них PID (Process ID — идентификатор процесса) в виде числа. Запуск команды "ps -ef" (см. выше) выведет список всех запущенных процессов в порядке их PID'​ов (вторая колонка). Файловая система /proc хранит информацию о каждом PID.
 +
 +В /proc названиями многих каталогов являются числа. Эти директории ссылаются на номера PID. В таких каталогах находятся файлы, которые предоставляют подробную информацию о положении,​ окружении и прочих деталях процесса. В выводе ps (см. выше) была следующая строка:​
 +
 +mbutcher ​ 1219  1207  0 12:23 pty/​s2 ​  ​00:​00:​00 /bin/bash
 +Этот процесс — запущенный bash shell, имеющий PID 1219. Каталог /proc/1219 содержит информацию об этом процессе.
 +
 +$ ls /proc/1219
 +cmdline ​ cpu  cwd  environ ​ exe  fd  maps  mem  root  stat  statm  status
 +В файле «cmdline» располагается команда,​ которая вызвала процесс. В файле «environ» находятся данные о значениях окружения для процесса. «status» содержит информацию о статусе процесса,​ среди которой пользовательский (UID) и групповой (GID) идентификаторы для пользователя,​ запустившего процесс,​ идентификатор родительского процесса (parent process ID — PPID) и текущий статус процесса (например,​ «Sleep» или «Running»).
 +
 +<​file>​
 +$ cat status
 +Name:   bash
 +State: ​ S (sleeping)
 +Tgid:   1219
 +Pid:    1219
 +PPid:   1207
 +TracerPid: ​     0
 +Uid:    501     ​501 ​    ​501 ​    501
 +Gid:    501     ​501 ​    ​501 ​    501
 +FDSize: 256
 +Groups: 501 10 18
 +VmSize: ​    2400 kB
 +VmLck: ​        0 kB
 +VmRSS: ​     1272 kB
 +VmData: ​     124 kB
 +VmStk: ​       20 kB
 +VmExe: ​      544 kB
 +VmLib: ​     1604 kB
 +SigPnd: 0000000000000000
 +SigBlk: 0000000080010000
 +SigIgn: 8000000000384004
 +SigCgt: 000000004b813efb
 +CapInh: 0000000000000000
 +CapPrm: 0000000000000000
 +CapEff: 0000000000000000
 +</​file>​
 +У каждого каталога процесса есть несколько символических ссылок. «cwd» ссылается на текущий рабочий каталог для процесса. «exe» — ссылка на исполняемую программу процесса,​ а «root» ссылается на каталог,​ который процесс рассматривает как корневой (обычно «/»). В каталоге «fd» содержится список символических ссылок на дескрипторы файлов,​ используемых процессом.
 +
 +Существуют и другие файлы в каталоге процесса,​ предоставляющие исчерпывающую информацию:​ от занятности процессора и памяти до количества времени,​ которое запущен процесс. Большая часть этих файлов описана в документации исходников ядра («Documentation/​file systems/​proc.txt»),​ а также доступна в man — "man proc".
 +
 +Информация о ядре: Кроме хранения сведений о процессах,​ файловая система /proc содержит множество информации,​ самостоятельно созданной ядром для описания общего состояния системы.
 +
 +Ядро и модули могут создавать файлы в /proc для того, чтобы предоставить информацию о своем текущем состоянии. Например,​ /proc/fb показывает,​ какие сейчас доступны устройства типа frame buffer (буферы фреймов обычно используются для отображения загрузочного логотипа).
 +
 +$ cat fb
 +0 VESA VGA
 +Обратите внимание,​ что 0 ссылается на индекс frame buffer'​а и устройство /dev/fb0. Если бы у меня был второй framebuffer,​ то появилась бы еще и строка с 1, соответствующая /dev/fb1. Часто данные proc ссылаются на устройства в /dev.
 +
 +В /proc хранится немало информации о железе. В файле /proc/pci написано про все обнаруженные в системе PCI устройства. Запуск команды "​[[lspci]]"​ выводит идентичную информацию,​ так как использует /proc/pci для получения сведений об устройствах. В /proc/bus находятся каталоги для bus-архитектур (PCI, PCCard, USB), в которых содержится информация об устройствах,​ присоединенных таким образом (PCI, PCCard, USB). Информация о сети располагается в /proc/net. Информацию о жестких дисках можно найти в /proc/ide и /proc/scsi (в зависимости от типа устройства). В /​procs/​devices присутствует список всех устройств системы (они разделены на две категории:​ «block» — блочные,​ «character» — символьные).
 +
 +<​file>​
 +$ cat /​proc/​devices
 + ​Character devices:
 +   1 mem
 +   2 pty/m%d
 +   3 pty/s%d
 +   4 tts/%d
 +   5 cua/%d
 +   7 vcs
 +  10 misc
 +  14 sound
 +  29 fb
 + 116 alsa
 + 162 raw
 + 180 usb
 + 226 drm
 + 254 pcmcia
 +
 +Block devices:
 +  1 ramdisk
 +  2 fd
 +  3 ide0
 + 22 ide1
 +</​file>​
 +
 +В действительности,​ в /proc находится намного больше файлов,​ чем было описано здесь. У каждого ядра они могут несколько различаться,​ в зависимости от того, что было включено в ядро, какое железо и программное обеспечение используется и в каком состоянии в настоящий момент находится компьютер. К некоторым из этих файлов постоянно обращается машина,​ а другие предоставляют «интуитивную» информацию.
 +
 +Работа с процессами через /proc: Некоторые файлы /proc предназначены не только для чтения. Запись в них может влиять на состояние ядра. Просмотр содержимого файла в /proc обычно безопасно,​ но запись в них без точной уверенности в своих действиях может приводить к фатальным последствиям. Несмотря на это, иногда запись в /proc — единственный способ связи с ядром.
 +
 +Например,​ в некоторых версиях ядра присутствует опция включения Web-сервера (khttp), работающего на уровне ядра. Из-за того, что запуск Web-сервера по умолчанию является риском с точки зрения безопасности,​ khttp требует записи в /proc для запуска.
 +
 +<​file>​
 +echo 1 > /​proc/​sys/​net/​khttpd/​start
 +</​file>​
 +Когда ядро видит, что содеримое /​proc/​sys/​net/​khttps/​start меняется с 0 (по умолчанию) на 1, оно запускает сервер khttpd.
 +
 +Существуют десятки других настраиваемых параметров в /proc — некоторые для конфигурации железа,​ другие для управления ядром. Однако,​ многие из них являются низкоуровневыми и могут привести к печальным последствиям,​ если указать неправильные значения. Поэтому,​ если вы твердо не уверены в своих действиях,​ менять параметры в /proc строго не рекомендуется.
 +
 +  * **Вывод**
 +
 +/proc и /dev представляют интерфейсы к внутренностям Linux'​а с помощью файлов. Они способствуют настройке и получению сведений об устройствах и процессах системы. Благодаря ним, можно с легкостью обновлять,​ изучать,​ запускать систему и устранять разнообразные неполадки. Понимание и применение знаний этих двух файловых систем являются ключом к созданию «более вашей» Linux-системы.
 +====== Описание файлов и директории из ProcFS ======
 +
 +  * /​proc/​PID/​cmdline – аргументы командной строки (где PID – идентификатор процесса или self);
 +  * /​proc/​PID/​environ – переменные окружения для данного процесса;​
 +  * /​proc/​PID/​status – статус процесса;​
 +  * /​proc/​PID/​fd – директория,​ содержащая символьные ссылки на каждый открытый файловый дескриптор;​
 +  * /​proc/​cpuinfo – информация о процессоре (производитель,​ модель,​ поколение и т.п.);
 +  * /​proc/​cmdline – параметры,​ передаваемые ядру при загрузке;​
 +  * /​proc/​uptime – количество секунд,​ прошедших с момента загрузки ядра и проведенных в режиме бездействия;​
 +  * /​proc/​version – содержит информацию о версии ядра, компилятора и другую информацию,​ связанную с загруженным ядром.
 +====== Ссылки ======
 +  * [[http://​www.nixp.ru/​articles/​%D0%A4%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%D1%8B%D0%B5-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B-dev-%D0%B8-proc-%D0%B2-Linux-2-4.html|Файловые системы /dev и /proc в Linux 2.4]]
procfs.txt · Последние изменения: 2015/07/17 13:31 — admin