$ id -u
Можно также узнать UID любого пользователя системы:
$ id -u USERNAME
UID суперпользователя (с именем root в подавляющем большинстве случаев) всегда равен 0:
$ id -u root
0
Для получения имени пользователя из числового UID применяется библиотечная функция getpwuid(), объявленная в заголовочном файле pwd.h следующим образом:
struct passwd * getpwuid (uid_t UID);
В структуре passwd нас интересует только одно поле, которое содержит имя пользователя:
struct passwd
{
/* ... */
char * pw_name;
};
Если UID не соответствует ни одному пользователю системы, то getpwuid() возвращает NULL.
Теперь можно написать программу, которая выводит некоторую информацию о текущем процессе (листинг 9.4).
Листинг 9.4. Программа getpinfo.c
Инструкция sleep (15) необходима для того, чтобы мы могли в течение 15 с проверить достоверность значения PID, выводимого программой. Итак, проверяем:
$ gcc -o getpinfo getpinfo.c
$ ps -f
UID PID PPID C STIME TTY TIME CMD
nnivanov 28229 28226 0 14:13 pts/0 00:00:00 bash
nnivanov 28316 1 98 14:14 pts/0 00:10:55 yes
nnivanov 29414 28229 0 14:24 pts/0 00:00:00 ./getpinfo
nnivanov 29421 28229 0 14:25 pts/0 00:00:00 ps -f
$ cat output
PID: 29414
PPID: 28229
UID: 500
Username: nnivanov
[1]+ Done ./getpinfo > output
Команду cat output лучше выполнять после завершения getpinfo. Не забывайте, что стандартный вывод использует механизм буферизации. Данные, перенаправляемые в файл output, могут попросту оставаться в буфере стандартного вывода до тех пор, пока программа getpinfo не завершится.
Базовая многозадачность
Темы:
Порождение нового процесса при помощи системного вызова fork().
Передача управления другой программе через системный вызов execve().
Использование различных реализаций execve().
Ожидание завершения процесса при помощи системного вызова wait().
Достарыңызбен бөлісу: |