Читаем Linux API. Исчерпывающее руководство полностью

4: FLOCK ADVISORY WRITE 274 03:07:81908 0 EOF

Файл /proc/locks хранит информацию о блокировках, созданных с применением вызовов flock() и fcntl(). Каждая запись состоит из восьми полей (слева направо).

1. Порядковый номер в наборе блокировок, удерживаемых для заданного файла (см. подраздел 51.3.4).

2. Тип блокировки. Значения FLOCK указывают на блокировки, созданные с помощью вызова flock(), а POSIX — на те, что созданы с использованием fcntl().

3. Режим блокировки: ADVISORY или MANDATORY.

4. Тип блокировки: READ или WRITE (относится к разделяемым и эксклюзивным блокировкам на основе вызова fcntl()).

5. Идентификатор процесса, удерживающего блокировку.

6. Три числа, разделенные двоеточиями, обозначают файл, для которого удерживается блокировка. Это мажорные и минорные номера устройства в текущей файловой системе, а также индексный дескриптор файла.

7. Начальный байт блокировки. В случае с блокировками на основе вызова flock() данный столбец всегда равен 0.

8. Конечный байт блокировки. Значение EOF показывает, что блокировка доходит до самого конца файла (то есть при вызове fcntl() поле l_len было равно 0). В случае с блокировками, основанными на flock(), этот столбец всегда равен EOF.

С помощью информации из файла /proc/locks можно определить, какими процессами и для каких файлов удерживаются те или иные блокировки. То, как это делается, показано в следующей сессии командной строки на примере блокировки 3 из списка, приведенного выше. Эта блокировка удерживается процессом с идентификатором 312 для индексного дескриптора 133853 на устройстве, чьи мажорный и минорный идентификаторы равны 3 и 7. Для начала воспользуемся командой ps(1), чтобы вывести сведения о процессе, чей PID равен 312:

$ ps — p 312

PID TTY TIME CMD

312? 00:00:00 atd

Как видите, программой, удерживающей блокировку, оказался демон atd, который выполняет пакетные задания по расписанию.

Чтобы найти заблокированный файл, поищем для начала в каталоге /dev устройство с идентификатором 3:7. Им оказался файл /dev/sda7:

$ ls — li /dev/sda7 | awk '$6 == “3,” && $7 == 10'

1311 brw-rw- 1 root disk 3, 7 May 12 2006 /dev/sda7

Теперь определим точку подключения устройства /dev/sda7 и найдем ту часть файловой системы, которой принадлежит индексный дескриптор с номером 133853:

$ mount | grep sda7

/dev/sda7 on / type reiserfs (rw) Устройство подключено к каталогу /

$ su Поэтому поиск выполняется по всем каталогам

Password:

# find / — mount — inum 133853 Ищем индексный дескриптор 133853

/var/run/atd.pid

Параметр — mount не дает команде find заходить в подкаталоги, к которым подключены другие файловые системы.

В завершение выведем содержимое заблокированного файла:

# cat /var/run/atd.pid

Демон atd удерживает блокировку для файла /var/run/atd.pid, содержащего ID процесса, в котором этот демон выполняется. Это делается для того, чтобы не дать запустить больше одного экземпляра программы atd. Такой подход будет рассмотрен в разделе 51.6.

Файл /proc/locks также позволяет получить сведения об отложенных запросах на получение блокировок:

$ cat /proc/locks

1: POSIX ADVISORY WRITE 11073 03:07:436283 100 109

1: — > POSIX ADVISORY WRITE 11152 03:07:436283 100 109

2: POSIX MANDATORY WRITE 11014 03:07:436283 0 9

2: — > POSIX MANDATORY WRITE 11024 03:07:436283 0 9

2: — > POSIX MANDATORY READ 11122 03:07:436283 0 19

3: FLOCK ADVISORY WRITE 10802 03:07:134447 0 EOF

3: — > FLOCK ADVISORY WRITE 10840 03:07:134447 0 EOF

Строки, где сразу после номера блокировки указаны символы — >, представляют собой запросы на получение блокировок с соответствующими номерами. Здесь мы имеем один отложенный запрос на получение блокировки 1 (необязательной, созданной вызовом fcntl()), два отложенных запроса на получение блокировки 2 (строгой, созданной вызовом fcntl()) и один отложенный запрос на получение блокировки 3 (созданной с помощью flock()).

Файл /proc/locks также содержит информацию об аренде файлов, установленной любыми процессами в системе. Аренда файлов — уникальный для Linux механизм, доступный в ядрах версии 2.4 и выше. Когда процесс арендует файл, он получает уведомления (на основе сигналов), если другие процессы пытаются выполнить для данного файла операции open() или truncate() (последняя учитывается, так как это единственный системный вызов, способный изменить содержимое файла, не открывая его). Механизм аренды файлов предоставляется для поддержки уступающих блокировок, применяющихся в протоколе SMB, и для аналогичной системы в протоколе NFS, которая называется делегированием. Больше подробностей об аренде файлов содержится в описании операции F_SETLEASE на странице fcntl(2) руководства.

51.6. Выполнение только одного экземпляра программы
Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных