← man/files
lockf — man lockf — 80×24
ugur@toprak:~/man/files$man lockf
Bölüm 1 Dosyalar

lockf

bir dosya kilidini tutarken komut yürütür

Özet

     lockf [-knsw] [-t seconds] file command [arguments]
     lockf [-s] [-t seconds] fd

Açıklama

lockf aracı, gerektiğinde bir dosya oluşturarak üzerinde özel (exclusive) bir kilit elde eder ve aksi açıkça belirtilmedikçe çıkışta dosyayı kaldırır. Kilidi tutarken, isteğe bağlı argümanlara sahip bir komut yürütür. Komut tamamlandıktan sonra lockf kilidi serbest bırakır ve -k seçeneği belirtilmediği sürece dosyayı kaldırır. 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 yerine bir dosya tanımlayıcısı (file descriptor) üzerinde işlem yapmak için de kullanılabilir. Hiçbir komut sağlanmazsa, fd 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, bir kabuk betiği içinde kilitleme yapmak için kullanılabilir.

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ı önerilir. Bu, 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 performans odaklı bir algoritma uygular. -k seçeneği kullanılmazsa, kilit sıralaması konusunda hiçbir garanti verilemeyeceği unutulmamalıdır.

Aşağıdaki seçenekler desteklenir:

  • -k: Komut tamamlandıktan sonra kilit dosyasının tutulmasını (kaldırılmamasını) sağlar.

  • -s: lockf'in sessizce çalışmasını sağlar. Kilidin elde edilememesi yalnızca çıkış durumunda belirtilir.

  • -n: Belirtilen kilit dosyası mevcut değilse lockf'in başarısız olmasına neden olur. -n belirtilmemişse, lockf gerektiğinde dosya oluşturur.

  • -t seconds: Kilit için bekleme zaman aşımını belirtir. Varsayılan olarak lockf, kilidi elde etmek için süresiz olarak bekler. Bu seçenekle bir zaman aşımı belirtilirse, lockf vazgeçmeden önce en fazla verilen saniye kadar bekler. 0 değerinde bir zaman aşımı verilebilir; bu durumda lockf kilidi hemen elde edemezse başarısız olur. Kilit zaman aşımına uğradığında komut yürütülmez.

  • -w: lockf'in dosyayı okumak yerine yazmak 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.

lockf hiçbir koşulda başka bir süreç tarafından tutulan bir kilidi kırmaz.

Çıkış Durumu

lockf kilidi başarıyla elde ederse, komut tarafından üretilen çıkış durumunu döndürür. Aksi takdirde, sysexits(3) içinde tanımlanan aşağıdaki çıkış kodlarından birini döndürür:

EX_TEMPFAIL Belirtilen kilit dosyası başka bir süreç tarafından zaten kilitlenmişti.

EX_CANTCREAT lockf aracı, örneğin yetersiz erişim izinleri nedeniyle kilit dosyasını oluşturamadı.

EX_UNAVAILABLE -n seçeneği belirtilmiş ve belirtilen kilit dosyası mevcut değil.

EX_USAGE lockf komut satırında bir hata vardı.

EX_OSERR Bir sistem çağrısı (örneğin fork(2)) beklenmedik şekilde başarısız oldu.

EX_SOFTWARE Komut normal şekilde çıkış yapmadı, ancak sinyal almış veya durdurulmuş olabilir.

Örnekler

     # İlk iş bir kilit alır ve arka planda 5 saniye uyur. İkinci iş kilidi almaya çalışır ve 1 saniye sonra zaman aşımına uğrar (PID numaraları farklılık gösterecektir):

 	   $ lockf mylock sleep 5 & lockf -t 1 mylock echo "Success"
 	   [1] 94410
 	   lockf: mylock: already locked

     # İlk iş bir kilit alır ve arka planda 1 saniye uyur. İkinci iş kilidi almak için 5 saniyeye kadar bekler ve başarı durumunda mesajı yazdırır (PID numaraları farklılık gösterecektir):

 	   $ lockf mylock sleep 1 & lockf -t 5 mylock echo "Success"
 	   [1] 19995
 	   Success
 	   [1]+  Done			 lockf mylock sleep 1

     # Bir dosyayı kilitleyin ve bir betik çalıştırın, kilit kullanılabilir değilse hemen geri dönün. Kilit sırasının garanti edilmesi için dosyayı sonradan silmeyin:

 	   $ lockf -t 0 -k /tmp/my.lock myscript

     # Bir kabuk betiğinin bir bölümünü kilit ile koruyun, kullanılabilir olması için 5 saniyeye kadar bekleyin. Kabuk betiğinin /tmp/my.lock kilit dosyasını açtığına ve lockf'in kilit çağrısını yalnızca geçirilen dosya tanımlayıcısı (9) aracılığıyla gerçekleştirdiğine dikkat edin. Bu durumda -k doğrudan varsayılır ve -w seçeneğinin bir etkisi yoktur çünkü dosya zaten kabuk tarafından açılmıştır. Bu örnek, ‘>’ işleminin kabukta kilit dosyasını değiştirmek yerine /tmp/my.lock dosyasını açıp kırparak (truncate) uygulandığını varsayar.

 	   (
 		   lockf -s -t 5 9
 		   if [ $? -ne 0 ]; then
 			   echo "Kilit elde edilemedi"
 			   exit 1
 		   fi

 		   echo Start
 		   # Bazı işler yap
 		   echo End
 	   ) 9>/tmp/my.lock

Ayrıca Bakınız

flock(2), lockf(3), sysexits(3)

Geçmiş

Bir lockf aracı ilk olarak FreeBSD 2.2 sürümünde ortaya çıkmıştır.

Yazarlar

John Polstra jdp@polstra.com

macOS 26.4 November 25, 2023 macOS 26.4