Utilizando flock
, varios procesos pueden tener un bloqueo compartido al mismo tiempo, o estar esperando adquirir un bloqueo de escritura. ¿Cómo obtengo una lista de estos procesos?
Es decir, para un archivo X dado, idealmente para encontrar la identificación del proceso de cada proceso que contiene o está esperando un bloqueo en el archivo. Sin embargo, sería un buen comienzo solo para contar el número de procesos que esperan un bloqueo.
lsof
enfoque que sugiere Joel Davis.lslocks
lee/proc/locks
, en un apuro puedes leer eso directamente tú mismo, con la advertencia de que los archivos se identifican por dispositivo e inodo en lugar de nombre. Como conoce el archivo, eso no debería ser un problema. Las entradas bloqueadas tienen un->
prefijo antes de la columna de tipo de bloqueo (agregando así una columna a esa línea).Dos posibilidades:
lsof
(mi preferencia) olslk
(específicamente para bloqueos de archivos):La salida de lslk es autoexpansiva pero
lsof
coloca la descripción del bloqueo en la columna "FD" (que está10uW
arriba). Desde la página del manual:Entonces la columna "FD" de
lsof
arriba se desglosa en:10
El descriptor literal de este archivo abierto. ¿A qué está vinculado?/proc/1650/fd/10
u
El archivo está abierto para leer y escribir.W
El programa tiene un bloqueo de escritura en el archivo.fuente
flock
! = mutex. Su grep habría perdido bloqueos como el de la publicación (sin mencionar que el primer campo es el nombre del programa ...)lsof puede ayudar a ver la lista de archivos. Aquí hay forma de ver los archivos bloqueados.
fuente
en caso de
lsof
que falte en el sistema,ls /proc/*/fd/* | grep LOCK_FILE_NAME
debe proporcionar la misma información.fuente