После завершения процесса я вижу, что файл блокировки не удален? Есть ли причина, по которой flock
файл сохраняется? Также как flock
узнать, есть ли полученная блокировка?
Вот пример из crontab
файла
* * * * * flock python <script_name>.py
решение1
Для большинства случаев использования flock
очень важно, чтобы файл блокировкинетбыть "очищен". В противном случае представьте себе такой сценарий:
- Процесс А открывает файл блокировки, обнаруживает, что он не существует, поэтому создает его.
- процесс A получает блокировку
- процесс B открывает замок (обнаруживает, что он уже существует)
- Процесс B пытается получить блокировку, но вынужден ждать
- процесс А снимает блокировку
- процесс B мгновенно получает блокировку
- процесс А удаляет файл блокировки
- Процесс C открывает файл блокировки, обнаруживает, что он не существует, поэтому создает новый. Обратите внимание, что теперь он держит открытымдругойфайл блокировки, который заблокировал процесс B.
- Процесс C пытается получить блокировку и ему это удается... но ему пришлось бы подождать, поскольку у процесса B все еще есть [предыдущая инкарнация] файла блокировки, открытого и заблокированного.