У меня довольно сложная программа на Python.Внутренне он имеет систему ведения журнала, которая использует эксклюзивный (LOCK_EX) fcntl.flock для управления глобальной блокировкой.По сути, всякий раз, когда дамп сообщения журнала сбрасывается, глобальная блокировка файла получается, сообщение отправляется в файл (отличается от файла блокировки) и глобальная блокировка файла освобождается.
Программа также несколько раз разветвляется (после журналауправление настроено).Обычно все работает.
Если родительский процесс убит (а дети остаются в живых), я иногда захожу в тупик.Все программы блокируются на fcntl.flock () навсегда.Попытка приобрести замок извне также блокирует навсегда.Я должен убить дочерние программы, чтобы исправить проблему.
Что сбивает с толку то, что lsof lock_file не показывает процесс удержания блокировки!Поэтому я не могу понять, почему файл заблокирован ядром, но ни один процесс не сообщил о его удержании.
Есть ли у flock проблемы с разветвлением?Является ли мертвый родитель каким-то образом удерживающим блокировку, даже если его больше нет в таблице процессов?Как мне решить эту проблему?