Программирование для Linux. Профессиональный подход
Шрифт:
■
fd
. Является подкаталогом, в котором содержатся ссылки на файлы, открытые процессом: описан в разделе 7.2.5, "Дескрипторы файлов процесса". ■
maps
. Содержит информацию о файлах, отображаемых в адресном пространстве процесса. О механизме отображения файлов в памяти рассказывалось в главе 5. "Взаимодействие процессов". Для каждого такого файла выводится соответствующий диапазон адресов в адресном пространстве процесса, права доступа, имя файла и пр. К числу отображаемых файлов относятся исполняемый файл процесса,
■
root
. Является символической ссылкой на корневой каталог процесса (обычно это /
). Корневой каталог можно сменить с помощью команды chroot
или функции chroot
. ■
stat
. Содержит статистическую информацию о процессе. Эти же данные представлены в файле status
, но здесь они находятся в неотформатированном виде и записаны в одну строку. Такой формат труден для восприятия, зато проще в плане синтаксического анализа. ■
statm
. Содержит информацию об использовании памяти процессом, описан в разделе 7.2.6. "Статистика использования процессом памяти". ■
status
. Содержит статистическую информацию о процессе, причем в отформатированном виде; описан в разделе 7 2.7, "Статистика процесса". ■
cpu
. Этот файл появляется только в симметричных многопроцессорных системах и содержит информацию об использовании процессорного времени (пользователями и системой). Из соображений безопасности права доступа к некоторым файлам предоставляются только владельцу процесса и суперпользователю.
7.2.1. Файл /proc/self
В файловой системе
/proc
есть дополнительный элемент, позволяющий программам находить информацию о своем собственном процессе. Файл /proc/self
является символической ссылкой на каталог, соответствующий текущему процессу. Естественно, содержимое ссылки меняется в зависимости от того, кто к ней обращается. Например, программа, представленная в листинге 7.2, с помощью файла
/proc/self
определяет свой идентификатор процесса (это делается лишь в демонстрационных целях, гораздо проще пользоваться функцией getpid
, описанной в разделе 3.1.1, "Идентификаторы процессов"). Для чтения содержимого символической ссылки вызывается функция readlink
(описана в разделе 8.11, "Функция readlink: чтение символических ссылок"). Листинг 7.2. (get-pid.c) Получение идентификатора процесса из файла
/proc/self
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
/* Определение идентификатора вызывающего процесса
pid_t get_pid_from_proc_self {
char target[32];
int pid;
/* Чтение содержимого символической ссылки. */
readlink("/proc/self", target, sizeof(target));
/* Адресатом ссылки является каталог, имя которого соответствует
идентификатору процесса. */
sscanf(target, "%d", &pid);
return (pid_t)pid;
}
int main {
printf("/proc/self reports process id %d\n",
(int)get_pid_from_proc_self);
printf("getpid reports process id %d\n", (int)getpid);
return 0;
}
7.2.2. Список аргументов процесса
Файл
cmdline
в файловой системе /proc содержит список аргументов процесса (см. раздел 2.1.1. "Список аргументов"). Этот список представлен одной строкой, в которой аргументы отделяются друг от друга нулевыми символами. Большинство функций работы со строками предполагает, что нулевым символом оканчивается вся строка, поэтому они не смогут правильно обработать файл cmdline
. В листинге 2.1 приводилась программа, которая отображала переданный ей список аргументов. Теперь, когда мы узнали назначение файлов
cmdline
файловой системы /proc
, можно написать программу, отображающую список аргументов другого процесса. Ее текст показан в листинге 7.3. Поскольку в строке файла cmdline
может содержаться несколько нулевых символов, ее длину нельзя определить с помощью функции strlen
(она лишь подсчитывает число символов, пока не встретится нулевой символ). Приходится полагаться на функцию read
, которая возвращает число прочитанных байтов. Листинг 7.3. (print-arg-list.c) Отображение списка аргументов указанного процесса
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
/* Вывод списка аргументов (по одному в строке) процесса
с заданным идентификатором. */
Поделиться:
Популярные книги
Опыты
Научно-образовательная:
философия
7.43
рейтинг книги
Добыча. Всемирная история борьбы за нефть, деньги и власть
Документальная литература:
публицистика
5.00
рейтинг книги
Дважды одаренный. Том VI
6. Дважды одаренный
Фантастика:
аниме
альтернативная история
фэнтези
фантастика: прочее
5.50
рейтинг книги
Воины
Фантастика:
фэнтези
7.00
рейтинг книги
Вечера в древности
Проза:
классическая проза
историческая проза
5.00
рейтинг книги
Годы странствий
Документальная литература:
биографии и мемуары
6.25
рейтинг книги
Цикл романов "Целитель". Компиляция. Книги 1-17
Целитель
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
12
5.00
рейтинг книги
Путь Шедара
4. Другая сторона
Фантастика:
боевая фантастика
6.83
рейтинг книги
Месть Седьмой
5. Наследие Лориена
Фантастика:
фэнтези
9.05
рейтинг книги
Солнечная система (Астрономия и астрофизика)
Научно-образовательная:
прочая научная литература
астрономия и космос
5.00
рейтинг книги
Газлайтер. Том 19
19. История Телепата
Фантастика:
попаданцы
аниме
фэнтези
6.25
рейтинг книги
Законы Рода. Том 5
5. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Техники ландшафтной арт-терапии
Научно-образовательная:
психотерапия и консультирование
5.00