Do czego służą pliki pid i lock?


75

Często widzę, że programy określają pliki pid i lock. I nie jestem do końca pewien, co oni robią.

Na przykład podczas kompilacji nginx:

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

Czy ktoś może rzucić na to trochę światła?

Odpowiedzi:


86

Pliki pid są zapisywane przez niektóre programy w celu zapisania ich identyfikatora procesu podczas uruchamiania. Ma to wiele celów:

  • Jest to sygnał dla innych procesów i użytkowników systemu, że ten konkretny program jest uruchomiony lub przynajmniej został pomyślnie uruchomiony.
  • Pozwala napisać skrypt naprawdę łatwo sprawdzić, czy jest uruchomiony i wydać proste killpolecenie, jeśli chce się go zakończyć.
  • Jest to tani sposób na sprawdzenie przez program, czy poprzednia działająca instancja nie zakończyła się pomyślnie.

Sama obecność pliku pid nie gwarantuje oczywiście, że ten konkretny identyfikator procesu jest uruchomiony, więc ta metoda nie jest w 100% niezawodna, ale „wystarczająco dobra” w wielu przypadkach. Sprawdzanie, czy określony PID istnieje w tabeli procesów, nie jest w pełni przenośny w systemach operacyjnych typu UNIX, chyba że chcesz polegać na psnarzędziu, które może nie być pożądane wywoływać we wszystkich przypadkach (i uważam, że niektóre systemy operacyjne typu UNIX i pstak wdrażaj inaczej).

Pliki blokujące są używane przez programy, aby zapewnić, że dwie (dobrze zachowujące się) osobne instancje programu, które mogą działać jednocześnie w jednym systemie, nie będą uzyskiwać dostępu do czegoś innego w tym samym czasie. Pomysł polega na tym, że zanim program uzyska dostęp do swojego zasobu, sprawdza obecność pliku blokady, a jeśli plik blokady istnieje, wyskakuje błąd lub czeka, aż zniknie. Jeśli nie istnieje, program, który chce „zdobyć” zasób, tworzy plik, a następnie inne wystąpienia, które mogą wystąpić później, będą czekać na zakończenie tego procesu. Oczywiście zakłada to, że program „zdobywający” zamek faktycznie go zwalnia i nie zapomina usunąć pliku blokady.

Działa to, ponieważ system plików we wszystkich systemach operacyjnych typu UNIX wymusza serializację , co oznacza, że ​​tylko jedna zmiana w systemie plików ma miejsce w danym momencie. Coś w rodzaju zamków z bazami danych i tym podobnych.


1
Jest to poprawne, chyba że plik blokady zostanie ręcznie usunięty. VMWare Player pokazuje ten sposób zachowania, na przykład, jeśli VMWare Player ulegnie awarii, musisz usunąć .lckplik z katalogu VM, inaczej poinformuje cię, że jest on używany podczas próby uruchomienia.
LawrenceC

1
Co z Windows? Jak obsługuje pliki .lock? W końcu nie jest podobny do Uniksa.
SarahofGaia

2
Nie sądzę, że programy Windows działają tak często. Jedynymi programami o takim zachowaniu, które widziałem, są porty z Uniksa / Linuksa
HaMster

2
LawrenceC, Re „ Gdy nie istnieje, program chcący„ uzyskać ”zasób tworzy plik ”; Ale istnieją odpowiednie funkcje specjalnie zaprojektowane do przeprowadzania takiej synchronizacji. Dlaczego nie polegać na tych funkcjach zamiast na „hakowaniu plików”?
Pacerier

1
@Pacerier - Zablokowane pliki w ten sposób są prawdopodobnie częściej używane przez skrypty powłoki lub programy, które mogą wchodzić w interakcje ze skryptami powłoki, ponieważ powłoki Unix / Linux bardzo łatwo wchodzą w interakcje z systemem plików, w porównaniu z innymi operacjami podstawowymi synchronizacji. Pliki łatwo zachowują się również w różnych procesach. Program o wysokiej wydajności najprawdopodobniej korzystałby z natywnych operacji systemu operacyjnego w porównaniu do plików, aby zsynchronizować elementy wewnętrznie lub nawet w porównaniu z innymi procesami, które nie są powłokami.
LawrenceC

14

Pliki te są często używane przez demony, które powinny być uruchamiane tylko raz w systemie. Plik PID zwykle zawiera numer identyfikacyjny procesu już uruchomionego i uruchomionego programu, jeśli taki istnieje. Ponadto po uruchomieniu tworzy plik blokady. Tak długo, jak plik blokady istnieje, nie uruchomi innego bez interwencji użytkownika. Jeśli plik blokady istnieje, a identyfikator procesu wymieniony w pliku pid nie jest uruchomiony, demon jest uważany za „martwy”, co oznacza, że ​​powinien działać, ale prawdopodobnie nie jest spowodowany awarią lub nieprawidłowym zamknięciem . Może to zainicjować specjalny scenariusz uruchamiania / restartowania dla niektórych programów. Prawidłowe zamknięcie spowoduje usunięcie pliku blokady.


+1 Wyjaśnienie użycia zarówno pliku blokady, jak i pliku pid.
Kyle Krull,

@Caleb - Wyjaśnij, dlaczego należy użyć zarówno pliku PID, jak i pliku blokady. Wygląda na to, że wystarczy plik PID. Jeśli plik PID istnieje, można sprawdzić PID, aby sprawdzić, czy proces jest uruchomiony, wystarczy wykonać mniej czynności niż sprawdzenie pliku blokującego, sprawdzenie pliku PID, a następnie zweryfikowanie istnienia procesu.
MVaughan,

@Maughan Aby uniknąć warunków wyścigowych, jeśli nic więcej. Niektóre aplikacje mają zastosowanie w czasach, gdy nadal potrzebują PID, ale mogą znieść blokadę. Ale na bardziej podstawowym poziomie, jeśli przeciążymy jeden plik dla obu operacji, otwieramy drzwi na awarie, takie jak awaria pozostawiająca niespójny stan w systemie.
Caleb

8

Plik PID będzie zawierał identyfikator procesu uruchomionego procesu. Ma to różne zastosowania; możesz go przeczytać i sprawdzić, czy proces nadal działa i podjąć odpowiednie działania lub przeczytać i zabić proces.

Plik blokady najprawdopodobniej jest specyficzny dla aplikacji. Pliki blokady służą do wskazania, że ​​jakiś zasób jest używany i że proces chcący uzyskać dostęp powinien poczekać, aż zasób zostanie zwolniony, zanim przejdzie dalej.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.