Özet
lockf [-knsw] [-t saniye] dosya komut [argümanlar]
lockf [-s] [-t saniye] fd
Açıklama
lockf yardımcı programı, gerektiğinde bir kilit dosyası oluşturarak üzerinde özel (exclusive) bir kilit elde eder ve aksi açıkça belirtilmediği sürece (-k parametresi verilmedikçe) çıkışta dosyayı kaldırır. Kilidi tuttuğu süre boyunca, isteğe bağlı argümanlara sahip belirtilen komutu yürütür. Komut tamamlandıktan sonra kilidi serbest bırakır ve kilit dosyasını temizler. flock(2) içinde açıklandığı gibi BSD tarzı kilitleme kullanılır; dosyanın sadece var olması bir kilit oluşturduğu şeklinde kabul edilmez.
lockf, bir dosya yolu yerine doğrudan bir dosya tanımlayıcısı (file descriptor - fd) üzerinde işlem yapmak için de kullanılabilir. Hiçbir komut sağlanmazsa, geçirilen değer bir dosya tanımlayıcısı olmalıdır. Komut içeren sürüm, istenen dosya tanımlayıcısı N olmak üzere /dev/fd/N yolu olarak sağlanarak bir dosya tanımlayıcısı ile de kullanılabilir. Bir dosya tanımlayıcısı kullanılırken -k seçeneği doğrudan varsayılır ve -n ile -w seçenekleri sessizce yoksayılır. Bu yöntem özellikle kabuk betikleri içinde kilitleme yapmak için son derece kullanışlıdır.
lockf aracı bir dizi süreç arasındaki eşzamanlılığı kolaylaştırmak için kullanılıyorsa, -k seçeneğinin kullanılması önemle tavsiye edilir. Bu seçenek, kilit sıralamasını garanti altına almanın yanı sıra eşzamanlı bağlantıyı kesme (unlink), bırakma ve yeniden elde etme faaliyetleriyle ilişkili CPU yükünü en aza indiren yüksek performanslı bir algoritma uygular. -k seçeneği kullanılmazsa, süreçler arasında kilit alma sırasıyla ilgili hiçbir garanti verilemez.
[!WARNING]
lockfhiçbir koşulda başka bir süreç tarafından aktif olarak tutulan bir kilidi zorla kırmaz.
Seçenekler
-k: Komut tamamlandıktan sonra kilit dosyasının tutulmasını (silinmemesini) sağlar. Sıralı kilit işlemleri ve performans için önerilir.-s: Sessiz (silent) modda çalışmasını sağlar. Kilidin elde edilememesi gibi durumlar standart hataya yazdırılmaz, yalnızca çıkış durumu (exit status) ile belirtilir.-n: Belirtilen kilit dosyası mevcut değilselockf'in başarısız olmasına neden olur. Belirtilmemişse,lockfgerektiğinde kilit dosyasını otomatik olarak oluşturur.-t saniye: Kilit elde etmek için maksimum bekleme zaman aşımını (timeout) belirtir. Varsayılan olaraklockfkilidi elde edene kadar süresiz bekler. Zaman aşımı verilirse, en fazla belirtilen saniye kadar bekler. Zaman aşımı değeri0verilebilir; bu durumda kilit hemen elde edilemezse anında başarısız olur. Zaman aşımı durumunda komut yürütülmez.-w:lockf'in kilit dosyasını okumak (read) yerine yazmak (write) için açmasını sağlar. Bu, salt okunur olarak açılan bir dosyanın özel olarak kilitlenemediği dosya sistemlerinde (NFSv4 dahil) gereklidir.
Çıkış Durumu
lockf kilidi başarıyla elde ederse, çalıştırılan komut tarafından döndürülen çıkış durumunu iletir. Kilit elde edilemezse veya bir hata oluşursa, sysexits(3) standartlarına uygun olarak aşağıdaki çıkış kodlarından birini döndürür:
| Çıkış Kodu | Sabit İsmi | Açıklama |
|---|---|---|
69 |
EX_UNAVAILABLE |
-n seçeneği belirtilmiş ancak kilit dosyası mevcut değil. |
73 |
EX_CANTCREAT |
Yetersiz erişim izinleri vb. nedenlerle kilit dosyası oluşturulamadı. |
75 |
EX_TEMPFAIL |
Belirtilen kilit dosyası başka bir süreç tarafından zaten kilitlenmişti. |
64 |
EX_USAGE |
lockf komut satırı argümanlarında hatalı veya eksik kullanım var. |
71 |
EX_OSERR |
Bir sistem çağrısı (örneğin fork(2)) beklenmedik şekilde başarısız oldu. |
70 |
EX_SOFTWARE |
Çalıştırılan komut normal şekilde çıkış yapmadı; sinyal almış veya durdurulmuş olabilir. |
Örnekler
Aşağıdaki örnekler kabukta (shell) çalıştırılabilecek şekilde gösterilmiştir:
İlk iş arka planda bir kilit alır ve 5 saniye uyur; ikinci iş kilidi almaya çalışır ve 1 saniye sonra zaman aşımına uğrar:
lockf mylock sleep 5 & lockf -t 1 mylock echo "Success"Çıktı örneği:
[1] 94410 lockf: mylock: already lockedİlk iş arka planda bir kilit alır ve 1 saniye uyur; ikinci iş ise kilidi almak için 5 saniyeye kadar bekler ve kilit açılınca çalışır:
lockf mylock sleep 1 & lockf -t 5 mylock echo "Success"Çıktı örneği:
[1] 19995 Success [1]+ Done lockf mylock sleep 1Bir kilit dosyası kullanarak betiği çalıştırma, kilit meşgulse beklemeden (
-t 0) çıkma ve kilit dosyası silinmesini önleme (-k):lockf -t 0 -k /tmp/my.lock myscript.shBir kabuk betiğinin kritik bir bölümünü dosya tanımlayıcısı (FD 9) üzerinden kilitleme:
( lockf -s -t 5 9 if [ $? -ne 0 ]; then echo "Hata: Başka bir işlem devam ediyor, kilit elde edilemedi." exit 1 fi echo "Kritik bölüm başladı..." # Güvenli bir şekilde yapılacak eşzamanlı işlemler sleep 3 echo "Kritik bölüm tamamlandı." ) 9>/tmp/my.lock[!NOTE] Bu örnekte, kabuk betiği
/tmp/my.lockdosyasını9numaralı dosya tanımlayıcısı ile açar velockfkilidi bu açık tanımlayıcı üzerinden alır. Bu kullanım modunda-kotomatik olarak etkinleşir ve dosya silinmez.
Ayrıca Bakınız
flock(2), lockf(3), sysexits(3)
Yazarlar
John Polstra <jdp@polstra.com> tarafından geliştirilmiştir.