Tek bir açık dosyayı bulmak için lsof kullanarak hızlı yolu nedir?

4 Cevap php

Bu lsof kullanarak açık olup olmadığını tek bir dosya test etmek çalışıyorum. Bu daha hızlı bir yolu var mı?

$result = exec('lsof | grep filename | wc -l');

if($result > 0) {
    //file is open
}

Ben dosya biliyorsanız onların sadece bir dosya için test etmenin bir yolu olmalı düşünüyorum. Gerçekten ihtiyacınız olan bir doğru veya yanlış olduğunu.

4 Cevap

Ben çok daha iyi bir yolunu buldu. Lsof ile (sürüm 4.63 üzerinde test), doğrudan belirli bir dosyayı sorgulayabilirsiniz:

if lsof filename > /dev/null; then
    # file is open
fi

Peki, wc atlayabilir ve (bu desen ve 1 (yani-başarı algılar eğer desen tespit etmezse grep)) 0 (yani başarı döndürür) grep dönüş değeri kullanın:

if lsof | grep filename > /dev/null; then
    # filename is in output of lsof
fi

Sen grep bulunuyor -l bayrak kullanarak bu biraz artırabilir:

if lsof | grep -l filename > /dev/null; then
...

Bu ilk maç bulunuyor algılar kez bakarak durdurmak için grep söyler.

Yapmak değil. Cevabınız sonucu ile bir şey yapmaya çalıştığınızda zaman değişebilir. Bunun yerine, dosya ile yapmak ve "kullanımda" hatası veya "paylaşım ihlali" uğraşacak ne yapmaya çalışın.

Kullan fuser. Hepsi mevcut konum eğer belirtilen dosyalarının herhangi bir kullanımından ise sıfırdan döner ve sıfır.