Como listar processos bloqueando o arquivo?

42

Usando flock , vários processos podem ter um bloqueio compartilhado ao mesmo tempo ou aguardar para adquirir um bloqueio de gravação. Como faço para obter uma lista desses processos?

Ou seja, para um determinado arquivo X, é ideal encontrar o ID do processo de cada processo que mantém ou está aguardando um bloqueio no arquivo. Seria muito bom começar apenas para obter uma contagem do número de processos aguardando por um bloqueio.

    
por Benubird 08.08.2013 / 17:24

4 respostas

35

lslocks , do pacote util-linux , faz exatamente isso.

Na coluna MODE , os processos aguardando por um bloqueio serão marcados com * .

    
por 08.08.2013 / 17:32
22

Duas possibilidades: lsof (minha preferência) ou lslk (especificamente para bloqueios de arquivo):

[root@policyServer ~]# lslk | grep "master.lock"
SRC          PID   DEV  INUM   SZ TY M   ST WH  END LEN NAME
master      1650 253,0 12423   33  w 0    0  0    0   0 /var/lib/postfix/master.lock

[root@policyServer ~]# lsof | grep "master.lock"
master     1650      root   10uW     REG              253,0       33      12423 /var/lib/postfix/master.lock

A saída de lslk é autoexpansível, mas lsof coloca a descrição de bloqueio na coluna "FD" (que é 10uW acima). Na página do manual:

The mode character is followed by one of these lock characters, describing the type of lock applied to the file:

N for a Solaris NFS lock of unknown type;
r for read lock on part of the file;
R for a read lock on the entire file;
w for a write lock on part of the file;
W for a write lock on the entire file;
u for a read and write lock of any length;
U for a lock of unknown type;
x for an SCO OpenServer Xenix lock on part      of the file;
X for an SCO OpenServer Xenix lock on the      entire file;
                       space if there is no lock.

Assim, a coluna "FD" de lsof acima se divide 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ção

O programa W tem um bloqueio de gravação no arquivo.

    
por 08.08.2013 / 20:05
5

lsof pode ajudar a ver a lista de arquivos. aqui está a maneira de ver os arquivos bloqueados.

sudo lsof /var/lib/dpkg/lock 
    
por 20.03.2015 / 10:15
0

no caso de lsof estar faltando no sistema, ls /proc/*/fd/* | grep LOCK_FILE_NAME deve fornecer as mesmas informações.

    
por 29.10.2018 / 09:05