Читаем 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 / Словари и Энциклопедии
C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных
C++ Primer Plus
C++ Primer Plus

C++ Primer Plus is a carefully crafted, complete tutorial on one of the most significant and widely used programming languages today. An accessible and easy-to-use self-study guide, this book is appropriate for both serious students of programming as well as developers already proficient in other languages.The sixth edition of C++ Primer Plus has been updated and expanded to cover the latest developments in C++, including a detailed look at the new C++11 standard.Author and educator Stephen Prata has created an introduction to C++ that is instructive, clear, and insightful. Fundamental programming concepts are explained along with details of the C++ language. Many short, practical examples illustrate just one or two concepts at a time, encouraging readers to master new topics by immediately putting them to use.Review questions and programming exercises at the end of each chapter help readers zero in on the most critical information and digest the most difficult concepts.In C++ Primer Plus, you'll find depth, breadth, and a variety of teaching techniques and tools to enhance your learning:• A new detailed chapter on the changes and additional capabilities introduced in the C++11 standard• Complete, integrated discussion of both basic C language and additional C++ features• Clear guidance about when and why to use a feature• Hands-on learning with concise and simple examples that develop your understanding a concept or two at a time• Hundreds of practical sample programs• Review questions and programming exercises at the end of each chapter to test your understanding• Coverage of generic C++ gives you the greatest possible flexibility• Teaches the ISO standard, including discussions of templates, the Standard Template Library, the string class, exceptions, RTTI, and namespaces

Стивен Прата

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