Korzystając z tego flock
, kilka procesów może mieć blokadę współdzieloną w tym samym czasie lub czekać na uzyskanie blokady zapisu. Jak uzyskać listę tych procesów?
Oznacza to, że dla danego pliku X idealnie jest znaleźć identyfikator każdego procesu, który wstrzymuje lub oczekuje blokady pliku. Byłby to jednak bardzo dobry początek, aby uzyskać liczbę procesów oczekujących na blokadę.
lsof
podejście sugerowane przez Joela Davisa.lslocks
czyta/proc/locks
, w mgnieniu oka możesz przeczytać to bezpośrednio, z zastrzeżeniem, że pliki są identyfikowane przez urządzenie i i-węzeł, a nie nazwę. Ponieważ znasz plik, nie powinno to stanowić problemu. Zablokowane wpisy mają->
prefiks przed kolumną typu blokady (co powoduje dodanie kolumny do tej linii).Dwie możliwości:
lsof
(moje preferencje) lublslk
(specjalnie dla blokad plików):Wyjście lslk jest samo-ekspansywne, ale
lsof
umieszcza opis blokady w kolumnie „FD” (10uW
powyżej). Ze strony podręcznika:Tak więc
lsof
powyższa kolumna „FD” dzieli się na:10
Dosłowny deskryptor tego otwartego pliku. Co jest powiązane przez/proc/1650/fd/10
u
Plik jest otwarty do odczytu i zapisuW
program ma blokadę zapisu w pliku.źródło
flock
! = mutex. Twój grep byłby brakowało zamki jak ten w poście (nie wspominając pierwsze pole jest nazwa programu ...)lsof może pomóc zobaczyć listę plików. tutaj jest sposób, aby zobaczyć zablokowane pliki.
źródło
w przypadku
lsof
braku samego systemu,ls /proc/*/fd/* | grep LOCK_FILE_NAME
powinien podać te same informacje.źródło