我有一个非常复杂的 python 程序。在内部,它有一个使用独占 ( LOCK_EX
)fcntl.flock
来管理全局锁定的日志系统。实际上,每当转储日志消息时,都会获取全局文件锁,将消息发送到文件(与锁文件不同)并释放全局文件锁。
该程序还会多次分叉(在设置日志管理之后)。一般来说,一切正常。
如果父进程被杀死(并且子进程还活着),我偶尔会遇到死锁。所有程序都fcntl.flock()
永远阻塞。尝试从外部获取锁也会永远阻塞。我必须杀死儿童程序来解决问题。
令人费解的是,它lsof lock_file
没有显示持有锁的进程!所以我无法弄清楚为什么文件被内核锁定但没有进程报告为持有它。
flock
分叉有问题吗?即使它不再在进程表中,死去的父级是否以某种方式持有锁?我该如何解决这个问题?