Получение информации о процессе Итак, мы выяснили, что к каждому процессу привязаны следующие важные данные:
идентификатор процесса (PID); идентификатор родительского процесса (PPID); идентификатор пользователя (UID). Есть и другие данные, которыми располагает процесс, но мы пока о них говорить не будем.
Получить PID, PPID и UID текущего процесса можно с помощью следующих системных вызовов, объявленных в заголовочном файле unistd.h:
pid_t getpid (void); pid_t getppid (void); uid_t getuid (void); Типы данных pid_t и uid_t являются целыми числами, размерность которых зависит от реализации. Чтобы использовать эти типы, нужно включить в программу заголовочный файл sys/types.h. Системный вызов getpid() возвращает идентификатор текущего процесса, getppid() — родительского, а getuid() — идентификатор пользователя, от лица которого выполняется процесс. Но возникает вопрос: почему последний из этих вызовов возвращает целое число?
Загляните в файл /etc/passwd, где хранится информация обо всех пользователях системы. В современных дистрибутивах Linux файл /etc/passwd может содержать довольно много "странных" записей. Не пугайтесь, в основном это служебные учетные записи псевдопользователей (pseudousers).
Каждая строка файла /etc/passwd — это запись, соответствующая конкретному пользователю системы. В свою очередь каждая запись разделяется двоеточиями на семь полей.
Первое поле — имя пользователя. Это то, что вы вводите в приглашении "login:" после загрузки системы.
В ранних Unix-подобных системах второе поле файла /etc/passwd содержало зашифрованный пароль. В современных системах это поле пустое или содержит символ "x", а зашифрованные пароли хранятся в других файлах.
Третье поле — идентификатор пользователя. Это то самое уникальное для каждого пользователя системы число, которое возвращает системный вызов getuid().
Четвертое поле — идентификатор группы по умолчанию.
В пятом поле /etc/passwd может быть что угодно. Это поле содержит описание пользователя, но чаще всего в нем находится либо полное имя пользователя, либо информация о том, для чего в системе "прописался" псевдопользователь.
Следующее поле содержит рабочий (домашний) каталог пользователя.
В последнем поле /etc/passwd указывается путь к командной оболочке пользователя.
Итак, теперь вы знаете, что каждому пользователю системы соответствует уникальное целое неотрицательное число, которое называется идентификатором пользователя и часто обозначается аббревиатурой UID (User IDentifier).
Чтобы узнать числовой UID текущего пользователя, можно выполнить следующую команду: