Если вы пролистаете содержимое каталога /proc, вы увидите много каталогов, названиями которых являются номера. Эти каталоги содержат информацию о все запущенных в данный момент процессах в системе:
$ ls -d /proc/[0-9]* /proc/1/ /proc/302/ /proc/451/ /proc/496/ /proc/556/ /proc/633/ /proc/127/ /proc/317/ /proc/452/ /proc/497/ /proc/557/ /proc/718/ /proc/2/ /proc/339/ /proc/453/ /proc/5/ /proc/558/ /proc/755/ /proc/250/ /proc/385/ /proc/454/ /proc/501/ /proc/559/ /proc/760/ /proc/260/ /proc/4/ /proc/455/ /proc/504/ /proc/565/ /proc/761/ /proc/275/ /proc/402/ /proc/463/ /proc/505/ /proc/569/ /proc/769/ /proc/290/ /proc/433/ /proc/487/ /proc/509/ /proc/594/ /proc/774/ /proc/3/ /proc/450/ /proc/491/ /proc/554/ /proc/595/ |
Имейте в виду, что как пользователь, вы можете увидеть информацию только о своих собственных процессах. Для других пользователей вы такой информации не получите. Поэтому перейдем в root и посмотрим какая информация доступна для процесса 127:
$ su Password: $ cd /proc/127 $ ls -l total 0 -r--r--r-- 1 root root 0 Dec 14 19:53 cmdline lrwx------ 1 root root 0 Dec 14 19:53 cwd -> // -r-------- 1 root root 0 Dec 14 19:53 environ lrwx------ 1 root root 0 Dec 14 19:53 exe -> /usr/sbin/apmd* dr-x------ 2 root root 0 Dec 14 19:53 fd/ pr--r--r-- 1 root root 0 Dec 14 19:53 maps| -rw------- 1 root root 0 Dec 14 19:53 mem lrwx------ 1 root root 0 Dec 14 19:53 root -> // -r--r--r-- 1 root root 0 Dec 14 19:53 stat -r--r--r-- 1 root root 0 Dec 14 19:53 statm -r--r--r-- 1 root root 0 Dec 14 19:53 status $ |
Каждый каталог содержит одинаковые входы. Вот краткое описание некоторых из них:
cmdline: этот (псевдо-) файл содержит целую командную строку, использованную для вызова процесса. Он не отформатирован: нет пробелов между программой и ее аргументами, и нет разделителя в конце строки. Чтобы посмотреть его, вы можете использовать: perl -ple 's,\00, ,g' cmdline.
cwd: это символическая ссылка на текущий рабочий каталог (следует из имени) процесса.
environ Этот файл содержит все переменные окружения, определенные для процесса, в форме VARIABLE=value. Подобно cmdline, вывод не форматирован вообще: нет разделителей между различными переменными, и нет разделителя в конце. Единственное решение как его посмотреть: perl -pl -e 's,\00,\n,g' environ.
exe: это символическая ссылка на соответствующий запущенному процессу выполняемый файл.
fd: этот подкаталог содержит список файловых дескрипторов, открытых процессом в данный момент. Смотрите ниже.
maps: когда вы выводите содержимое именованной трубы (с помощью cat, например), вы можете видеть части адресного пространства процесса, которые в текущий момент отображаются в файле. Слева направо это поля: адресное пространство, связанное с этим отображением, права отображения, смещение с начала файла, где начинаются отображения, страший и младший номер (в шестнадцатиричном формате) устройства, где хранится файл отображения, номер узла файла и, последнее, имя файла. Когда устройство обозначено как 0 и нет номера узла и имени файла - это анонимное отображение. Смотрите mmap(2).
root: Это символическая ссылка на корневой каталог, используемый процессом. Обычно это будет /, но посмотрите chroot(2).
status: этот файл содержит различную информацию о процессе: название выполняемой программы, его текущее состояние, его PID и PPID, его реальные и эффективные UID и GID, использование им памяти, и другое.
Если мы выведем список каталога fd для нашего процесса 127, мы получим следующее:
$ ls -l fd total 0 lrwx------ 1 root root 64 Dec 16 22:04 0 -> /dev/console l-wx------ 1 root root 64 Dec 16 22:04 1 -> pipe:[128] l-wx------ 1 root root 64 Dec 16 22:04 2 -> pipe:[129] l-wx------ 1 root root 64 Dec 16 22:04 21 -> pipe:[130] lrwx------ 1 root root 64 Dec 16 22:04 3 -> /dev/apm_bios lr-x------ 1 root root 64 Dec 16 22:04 7 -> pipe:[130] lrwx------ 1 root root 64 Dec 16 22:04 9 -> /dev/console $ |
Фактически, это список файловых дескрипторов, открытых процессом. Каждый открытый дескриптор обозначен символической ссылкой, именем каждого номера дескриптора, и указателем на файл, открытый этим дескриптором. [21]. Обратите также внимание на права symlinks: это - единственное место, где они имеют смысл, поскольку они представляют права, с которыми файл, соответствующий дескриптору, был открыт.
[21] Если вы помните, что рассказывалось в разделе “Переназначения и Каналы”, вы знаете, что обозначают дескрипторы 0, 1 и 2.