Ö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.