% cat /proc/locks
ls POSIX ADVISORY WRITE 5467 08:05:181288 0 2147483647 d1b5f740
00000000 dfea7d40 00000000 00000000
В файле могут присутствовать дополнительные строки, если какие-то программы устанавливали свои блокировки. В данном случае идентификатор процесса программы lock-file
— 5467. Убедимся в этом с помощью команды ps:
% ps 5467
PID TTY STAT TIME COMMAND
5467 pts/28 S 0:00 ./lock-file /tmp/test-file
Заблокированный файл /tmp/test-file
находится на устройстве со старшим и младшим номерами 8 и 5 соответственно. Это номера устройства /dev/sda5
:
% df /trap
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/sda5 8459764 5094292 2935736 63% /
% ls -l /dev/sda5
brw-rw---- 1 root disk 8, 5 May 5 1998 /dev/sda5
На этом устройстве с файлом /tmp/test-file
связав индексный дескриптор 181288:
% ls --inode /trap/test-file
181288 /tmp/test-file
7.6. Системная статистика
Два элемента файловой системы /proc
содержат полезную статистическую информацию. В файле /proc/loadavg
находятся данные о загруженности системы. Первые три показателя — это число
В файле /proc/uptime
отражено, сколько времени прошло с момента загрузки системы и сколько времени с тех пор система пребывала в неактивном состоянии. Оба показателя выражены в секундах и представлены числами с плавающей запятой:
% cat /proc/uptime
3248936.18 3072330.49
Программа, показанная в листинге 7 7. определяет общее время работы и время простоя системы и отображает эти значения в понятном формате.
#include
/* Запись результата в стандартный выходной поток.
Параметр TIME это количество времени, а параметр LABEL --
короткая описательная строка. */
void print_time(char* label, long time) {
/* Константы преобразования. */
const long minute = 60;
const long hour = minute * 60;
const long day = hour * 24; /* Вывод результата. */
printf("%s: %ld days, %ld:%02ld:%02ld\n", label, time / day,
(time % day) / hour, (time % hour) / minute, time % minute);
}
int main() {
FILE* fp;
double uptime, idle_time;
/* Чтение показателей времени из файла /proc/uptime. */
fp = fopen("/proc/uptime", "r");
fscanf(fp, "%lf %lf\n", &uptime, &idle_time);
fclose(fp);
/* Форматирование и вывод. */
print_time("uptime ", (long)uptime);
print_time("idle time", (long)idle_time);
return 0;
}
Общее время работы системы отображают также команда uptime
и функция sysinfo()
(описана в разделе 8.14, "Функция sysinfo(): получение системной статистики"). Команда uptime
дополнительно выдает показатели средней загруженности, извлекаемые из файла /proc/loadavg
.
Глава 8
Системные вызовы Linux
Мы уже познакомились с большим количеством функций, реализующих различные системные задачи, например анализ командной строки, манипулирование процессами и отображение файлов в памяти. Если присмотреться повнимательнее, то окажется, что все они подпадают под две категории в зависимости от способа реализации.