Pid ve kilit dosyaları ne içindir?


75

Genellikle programların pid ve kilit dosyaları belirttiğini görüyorum. Ve ne yaptıklarından emin değilim.

Örneğin, nginx'i derlerken:

--pid-path=/var/run/nginx.pid \
--lock-path=/var/lock/nginx.lock \

Birisi buna ışık tutabilir mi?

Yanıtlar:


86

pid dosyaları, bazı programlar tarafından işlem kimliklerini başlarken kaydetmek için yazılır. Bunun birden fazla amacı var:

  • Sistemin diğer işlemlerine ve kullanıcılarına bu programın çalıştığı ya da en azından başarılı bir şekilde başladığının bir işareti.
  • Birinin çalışıp çalışmadığını kontrol etmek için gerçekten kolay bir komut dosyası yazmasına izin verir ve killbitirmek istiyorsa düz bir komut verir.
  • Bir programın önceki çalışan bir örneğinin başarıyla çıkıp çıkmadığını görmesi için ucuz bir yoldur.

Bir pid dosyasının mevcudiyeti, belirli bir işlem kimliğinin çalıştığını garanti etmez, elbette, bu yöntem% 100 kusursuz değildir ancak birçok durumda "yeterince iyi" dir. Belirli bir PID'nin işlem tablosunda olup olmadığını kontrol etmek, psyardımcı programa bağlı kalmak istemediğiniz sürece, UNIX benzeri işletim sistemlerinde tamamen taşınabilir olmadığından emin olun ; psyine de farklı şekilde uygulamak ).

Kilit dosyaları, bir sistemde aynı anda çalışabilen iki (iyi niyetli) ayrı bir program örneğinin aynı anda başka bir şeye erişmemesini sağlamak için programlar tarafından kullanılır. Fikir, programın kaynağına erişmeden önce, bir kilit dosyasının varlığını kontrol eder ve kilit dosyası varsa, hata verir veya kaybolmasını bekler. Varolmadığında, kaynağı "almak" isteyen program dosyayı oluşturur ve daha sonra karşılaşılabilecek diğer örnekler bu işlemin onunla yapılmasını bekler. Tabii ki, bu program kilidi "alma" aslında serbest bırakıyor ve kilit dosyasını silmeyi unutmaz.

Bu, UNIX benzeri tüm işletim sistemleri altındaki dosya sisteminin seri hale getirilmesini zorunlu kıldığı için çalışır , bunun anlamı, dosya sisteminde yalnızca bir değişiklik gerçekten herhangi bir zamanda gerçekleşir. Veritabanları ve benzeri ile benzer kilitleri sıralamak.


1
Kilit dosyası manuel olarak silinmediği sürece bu doğrudur. VMWare Player bu davranışı sergiler, örneğin, VMWare Player çökerse, .lckVM'nin dizinindeki bir dosyayı silmeniz gerekir, aksi takdirde başlatmaya çalıştığınızda kullanımda olduğunu size söyler.
LawrenceC

1
Peki ya Windows? .Lock dosyalarını nasıl işler? Sonuçta, Unix benzeri değil.
SarahofGaia 15:15

2
Windows programlarının bu şekilde çalışmasının yaygın olduğunu düşünmüyorum. Gördüğüm bu davranışa sahip olan programlar Unix / Linux
HaMster

2
LawrenceC, Re " Var olmadığı zaman," kaynak elde etmek "isteyen program dosyayı yaratır "; Ancak , bu tür bir senkronizasyon yapmak için özel olarak yapılmış uygun fonksiyonlar vardır . Neden "dosya kesmek" kullanmak yerine bu işlevlere güvenmiyorsunuz?
Pacerier

1
@Pacerier - Bu şekilde dosyaları kilitle, muhtemelen daha çok kabuk komut dosyaları veya kabuk komut dosyaları ile etkileşime girebilecek programlar gibi şeyler tarafından kullanılır, çünkü Unix / Linux kabukları diğer senkronizasyon ilkelerine karşı dosya sistemiyle çok kolay etkileşime girer. Dosyalar ayrıca farklı işlemlerde de kolayca devam eder. Yüksek performanslı bir program muhtemelen yerel işletim sistemi ilkellerini, dosyaları dahili olarak eşitlemeye ya da hatta kabukları olmayan diğer işlemlere karşı eşitlemeye yaratacak.
LawrenceC

14

Bu dosyalar genellikle sistemde yalnızca bir kez çalıştırılması gereken ödemeler tarafından kullanılır. PID dosyası genellikle önceden başlatılmış ve çalışan bir programın işlem kimliği numarasını (varsa) içerir. Ayrıca, başlatıldığında kilit dosyasını oluşturur. Kilit dosyası bulunduğu sürece, kullanıcı müdahalesi olmadan bir başkasına başlamaz. Kilit dosyası varsa ve pid dosyasında belirtilen işlem kimliği çalışmıyorsa, arka plan programı "ölü" durumda kabul edilir; bu, çalışmakta olması gerektiği, ancak büyük olasılıkla bir çökme veya yanlış kapatma nedeniyle olmadığı anlamına gelir . Bu, bazı programlar için özel bir başlatma / yeniden başlatma senaryosu başlatabilir. Düzgün kapatılması, kilit dosyasını kaldırır.


+1 Hem kilit dosyasına hem de pid dosyasına sahip olmanın kullanımının açıklanması.
Kyle Krull

@Caleb - Lütfen hem PID dosyasının hem de kilit dosyasının neden kullanılacağını açıklayın. Bir PID dosyasının yeterli olacağı görülüyor. PID dosyası varsa, işlemin çalışıp çalışmadığını görmek için PID kontrol edilebilir, bir kilit dosyasını kontrol etmek, bir PID dosyasını kontrol etmek ve işlemin varlığını doğrulamaktan daha az adım atar.
MVaughan

@MVaughan Başka bir şey değilse, yarış koşullarından kaçınmak için. Bazı uygulamaların, hala PID'ye ihtiyaç duyduğu ancak kilidi bırakabileceği zamanlar için kullanımı vardır. Ancak daha temel bir düzeyde, her iki işlem için bir dosyayı aşırı yüklerseniz, sistemde tutarsız bir durum bırakan bir kilitlenme gibi arızalara kapıyı açarsınız.
Caleb

8

Bir PID dosyası, çalışan bir işlemin İşlem Kimliğini içerecektir. Bunun çeşitli kullanımları vardır; okuyabilir ve işlemin devam ettiğini ve uygun işlemleri yapıp yapmadığını kontrol edebilir veya okuyabilir ve işlemi öldürebilirsiniz.

Bir kilit dosyası büyük olasılıkla uygulamaya özgüdür. Kilitleme dosyaları, bazı kaynakların kullanımda olduğunu ve erişim isteyen işlemin devam etmeden önce kaynak serbest bırakılıncaya kadar beklemesi gerektiğini belirtmek için kullanılır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.