Основы многозадачности в Linux


$ id -u Можно также узнать UID любого пользователя системы: $ id -u USERNAME



бет6/15
Дата16.11.2022
өлшемі472,04 Kb.
#158456
1   2   3   4   5   6   7   8   9   ...   15
Байланысты:
5-6 лаб раб (1)

$ 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().


Достарыңызбен бөлісу:
1   2   3   4   5   6   7   8   9   ...   15




©engime.org 2022
әкімшілігінің қараңыз

    Басты бет