Kilitleme dosyası nasıl listelenir?


51

Kullanarak flock, birkaç işlem aynı anda paylaşılan bir kilit alabilir veya yazma kilidi almak için bekliyor olabilir. Bu işlemlerin bir listesini nasıl alabilirim?

Diğer bir deyişle, belirli bir dosya için, dosya üzerinde kilitlenen ya da bekleyen her işlemin işlem kimliğini bulmak için idealdir. Çok iyi bir başlangıç ​​olabilirdi, ancak sadece kilitlenmeyi bekleyen işlemlerin sayısının alınması.

Yanıtlar:


42

lslocksGelen util-linux paketi , tam olarak bunu yapar.

In MODEsütununda, bir kilit bekleyen süreçler bir ile işaretlenecektir *.


3
Apt-cache, util-linux'un zaten en yeni sürüm olduğunu söylüyor (2.20.1-1ubuntu3), ancak lslock'larım yok; bana verecek bir depo var mı?
Benubird

2
Bu 2,22'de eklenmiş gibi görünüyor, bu yüzden Ubuntu'nun sürümü çok eski. Muhtemelen sonunda yeni bir sürüm mevcut olacak. (Bu aynı zamanda RHEL 6 veya CentOS için de geçerlidir.) Kendiniz yapabilir veya lsofJoel Davis'in önerdiği yaklaşımı kullanabilirsiniz .
mattdm

6
lslocksokur /proc/locks, bir tutam kendinizi dosyalar cihaz ve inode'un ziyade adıyla tanımlanır uyarı ile, doğrudan o okuyabilirsiniz. Dosyayı bildiğinden beri, bu bir problem olmamalı. Engellenen girdilerin ->kilit tipi sütundan önce bir öneki vardır (bu nedenle bu satıra bir sütun ekler).
mr.spuratic

27

İki olasılık: lsof(tercihim) veya lslk(özellikle dosya kilitleri için):

[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

Lslk'in çıktısı kendiliğinden açıklayıcıdır ancak lsofkilit açıklamasını "FD" sütununa ( 10uWyukarıdaki olan) koyar . Man sayfasından:

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.

Yani yukarıdaki "FD" sütunu aşağıdakilere lsofayrılır:

10Bu açık dosyanın değişmez tanımlayıcısı. Neye bağlı/proc/1650/fd/10

u Dosya okuma ve yazma için açık

W programın dosya yazma kilidi var.


1
Lslk'i nereden bulacağımı bulamıyorum ve artık bakılmıyor gibi görünüyor. Ayrıca dikkat edilmesi gereken, lsof dosyasının yalnızca dosyayı kilitleyen işlemleri göstermesini istiyorsanız, "^ mutex" ifadesini kullanmanız gerektiğidir. Aynı zamanda 'tutma' ve 'engelleme' arasında ayrım yapmaz.
Benubird

FD alanının ilk harf karakteri, dosyanın açıldığı dosyadır (beklediğin gibi olduğunu sanıyorum), isteğe bağlı ikinci harf karakteri, (varsa) dosyadaki kilidini (varsa) "bloke etmek" ile ne demek istediğinizi flockvarsayalım. ) Ayrıca ! = mutex.
Grepiniz postadaki

D'oh! Haklısın - "mutex" senaryomun adıydı, bu yüzden 'mutex' için grepping sadece benim davam için geçerli. Buna dikkat çektiğiniz için teşekkürler
Benubird

Ben de aptalca bir hata yaptım gibi iyi görünüyor: "İlk harf karakter modu dosya ile açtı ..."
Bratchley

5

lsof dosya listesini görmek için yardımcı olabilir. kilitli dosyaları görmenin yolu budur.

sudo lsof /var/lib/dpkg/lock 

0

durumda lsofkendisi sistemde eksik, ls /proc/*/fd/* | grep LOCK_FILE_NAMEaynı bilgileri sağlamalıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.