Утилита командной строки

Утилита командной строки состоит из следующих исходных файлов:

main.c
Содержит разбор аргументов командной строки, начало выполнения программы.
procfs.c
Прочесывает файловую систему /proc; это основная часть, где делается вся «работа».
procfs.h
Содержит прототипы функций.
tfp.h
Основной заголовочный файл; содержит описания всего необходимого.
tfp.use
Информация по использованию файла (для use tfp из командной строки).
Функционирование

По стандартному соглашению QSSL для имен файлов в Makefile, файл с информацией по использованию утилиты имеет одно с ней имя tfp (аббревиатура от Thread Finger Print) с расширением .use.

Выполнение начинается с функции main() файла main.c, которая выполняет разбор командной строки. При разборе проверяется, задал ли пользователь одно или несколько имен процессов в командной строке и для каждого заданного имени процесса сразу вызывается show_tfp_name(). Если ничего не задано, то просто вызывается show_tfp_name(). Вот и всё, что есть в main.c.

Большая часть работы приходится на файл procfs.c. Функция show_tfp_name() выполняет всю основную обработку данных. Она принимает или имя процесса, и в этом случае производит поиск заданного процесса, или NULL, означающий обработку всех процессов. Для каждого процесса все его потоки проверяются на наличие POSIX ключа, имеющего нашу сигнатуру. Для любого потока с сигнатурой печатается информация, включая его идентификационную строку.

Заметьте, что утилита командной строки должна быть запущена от имени root, или быть SETUID root. Всё-таки, нам бы не хотелось что бы любой процесс мог иметь возможность копаться в адресном пространстве других процессов.