Почему flock не очищает файл блокировки?

Почему flock не очищает файл блокировки?

После завершения процесса я вижу, что файл блокировки не удален? Есть ли причина, по которой flockфайл сохраняется? Также как flockузнать, есть ли полученная блокировка?

Вот пример из crontabфайла

* * * * * flock python <script_name>.py

решение1

Для большинства случаев использования flockочень важно, чтобы файл блокировкинетбыть "очищен". В противном случае представьте себе такой сценарий:

  • Процесс А открывает файл блокировки, обнаруживает, что он не существует, поэтому создает его.
  • процесс A получает блокировку
  • процесс B открывает замок (обнаруживает, что он уже существует)
  • Процесс B пытается получить блокировку, но вынужден ждать
  • процесс А снимает блокировку
  • процесс B мгновенно получает блокировку
  • процесс А удаляет файл блокировки
  • Процесс C открывает файл блокировки, обнаруживает, что он не существует, поэтому создает новый. Обратите внимание, что теперь он держит открытымдругойфайл блокировки, который заблокировал процесс B.
  • Процесс C пытается получить блокировку и ему это удается... но ему пришлось бы подождать, поскольку у процесса B все еще есть [предыдущая инкарнация] файла блокировки, открытого и заблокированного.

Связанный контент