man/network
man · Ağ

$ shlock

Bölüm 1 ·

kabuk betikleri için bir kilit dosyası oluşturur veya doğrular

Özet

     shlock [-du] [-p PID] -f lockfile

Açıklama

NOT: shlock komutunun kullanımı artık önerilmemektedir ve bunun yerine lockf(1) kullanılmalıdır.

shlock komutu, bir kabuk veya başka bir betik programı adına bir kilit dosyası oluşturabilir veya doğrulayabilir. Bir kilit dosyası oluşturmaya çalıştığında, eğer zaten bir tane mevcutsa, shlock bunun geçerli olup olmadığını doğrular. Geçerliyse, shlock sıfır dışı bir çıkış koduyla sonlanır. Geçersizse, shlock kilit dosyasını kaldırır ve yenisini oluşturur.

shlock, nihai hedef kilit dosyasını oluşturmak için atomik bir işlem olan link(2) sistem çağrısını kullanır (yani, bu mekanizmanın sistem posta kutularını kilitlemek için orijinal kullanımından dolayı bu adı alan "nokta kilitleme" (dot locking)). Komut satırından alınan işlem kimliğini ("PID") istenen kilit dosyasına yerleştirir.

shlock, mevcut bir kilit dosyasının hala geçerli olduğunu doğrulamak için, kilidi tutan işlemin varlığını kontrol etmek amacıyla sıfır sinyalli kill(2) kullanır.

-d seçeneği, shlock'un ne yaptığı hakkında ayrıntılı bilgi vermesini (verbose) sağlar.

lockfile ile birlikte -f argümanı her zaman gereklidir.

-p seçeneği ile PID, programın bir kilit dosyası oluşturması istendiğinde verilir; bu seçenek olmadığında, shlock yalnızca kilit dosyasının geçerliliğini kontrol eder.

-u seçeneği, UUCP tarafından oluşturulan kilitlerle uyumlu olması için shlock'un PID'yi ASCII yerine ikili (binary) bir pid_t olarak okumasını ve yazmasını sağlar.

Çıkış Durumu

Sıfır çıkış kodu, geçerli bir kilit dosyasını belirtir.

Örnekler

   BOURNE SHELL
     #!/bin/sh
     lckfile=/tmp/foo.lock
     if shlock -f ${lckfile} -p $$
     then
     #	     kilit gerektiren işlemi yapın
	     rm ${lckfile}
     else
	     echo Lock ${lckfile} already held by `cat ${lckfile}`
     fi

   C SHELL
     #!/bin/csh -f
     set lckfile=/tmp/foo.lock
     shlock -f ${lckfile} -p $$
     if ($status == 0) then
     #	     kilit gerektiren işlemi yapın
	     rm ${lckfile}
     else
	     echo Lock ${lckfile} already held by `cat ${lckfile}`
     endif

     Örnekler, kilit dosyasının oluşturulacağı dosya sisteminin kullanıcı tarafından yazılabilir olduğunu ve kullanılabilir alana sahip olduğunu varsayar.

Ayrıca Bakınız

lockf(1)

Tarihçe

shlock, Mart 1986'da yayınlanan ilk Network News Transfer Protocol (NNTP) yazılım dağıtımı için yazılmıştır. Algoritma, HoneyDanBer UUCP üzerinde yaptığı çalışmalardan yola çıkarak Peter Honeyman tarafından önerilmiştir.

Yazarlar

Erik E. Fair fair@clock.org

Hatalar

Farklı sistemlerdeki NFS veya diğer ağ dosya sistemlerinde çalışmaz çünkü farklı sistemlerin ayrık PID alanları vardır.

Bir kilit dosyasının silinmediği, dosyayı oluşturan işlemin sonlandığı ve sistemin, sonlanan kilit dosyasındaki PID ile aynı PID'ye sahip yeni bir işlem oluşturduğu durumu ele alamaz. Bu durumda, işlem ilk etapta kilidi oluşturan işlemle ilişkisiz olsa bile, kilit dosyası geçerli görünecektir. İşiniz bittiğinde her zaman kilit dosyalarınızı kaldırın.