Usando flock
, vários processos podem ter um bloqueio compartilhado ao mesmo tempo ou aguardar para adquirir um bloqueio de gravação. Como obtenho uma lista desses processos?
Ou seja, para um determinado arquivo X, idealmente, encontre a identificação do processo de cada processo que mantém ou está aguardando um bloqueio no arquivo. Seria um começo muito bom, porém, apenas para obter uma contagem do número de processos aguardando um bloqueio.
lsof
abordagem sugerida por Joel Davis.lslocks
lê/proc/locks
, em uma pitada, você pode ler isso diretamente, com a ressalva de que os arquivos são identificados pelo dispositivo e pelo inode, e não pelo nome. Como você conhece o arquivo, isso não deve ser um problema. As entradas bloqueadas têm um->
prefixo antes da coluna do tipo de bloqueio (adicionando uma coluna a essa linha).Duas possibilidades:
lsof
(minha preferência) oulslk
(especificamente para bloqueios de arquivo):A saída de lslk é auto-expansível, mas
lsof
coloca a descrição do bloqueio na coluna "FD" (10uW
acima). Na página do manual:Portanto, a coluna "FD"
lsof
acima é dividida em:10
O descritor literal deste arquivo aberto. O que está vinculado por/proc/1650/fd/10
u
O arquivo está aberto para leitura e gravaçãoW
programa tem um bloqueio de gravação no arquivo.fonte
flock
! = mutex. Seu grep teria perdido fechaduras como a que no post (para não mencionar o primeiro campo é o nome do programa ...)lsof pode ajudar a ver a lista de arquivos. aqui está uma maneira de ver os arquivos bloqueados.
fonte
caso
lsof
esteja faltando no sistema,ls /proc/*/fd/* | grep LOCK_FILE_NAME
deve fornecer as mesmas informações.fonte