के लिए पीआईडी ​​और लॉक फाइलें क्या हैं?


75

मैं अक्सर देखता हूं कि प्रोग्राम पीआईडी ​​और लॉक फाइलें निर्दिष्ट करते हैं। और मुझे पूरा यकीन नहीं है कि वे क्या करते हैं।

उदाहरण के लिए, जब संकलन nginx:

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

क्या कोई इस पर कुछ प्रकाश डाल सकता है?

जवाबों:


86

जब वे शुरू कर रहे हैं, तो उनकी प्रक्रिया आईडी को रिकॉर्ड करने के लिए कुछ प्रोग्राम्स द्वारा पीआईडी ​​फाइलें लिखी जाती हैं। इसके कई उद्देश्य हैं:

  • यह सिस्टम की अन्य प्रक्रियाओं और उपयोगकर्ताओं के लिए एक संकेत है कि विशेष कार्यक्रम चल रहा है, या कम से कम सफलतापूर्वक शुरू हो गया है।
  • यह एक स्क्रिप्ट को लिखने की अनुमति देता है, अगर यह चल रहा है और killअगर कोई इसे समाप्त करना चाहता है, तो एक सादा आदेश जारी करना आसान है।
  • यह एक कार्यक्रम के लिए एक सस्ता तरीका है यह देखने के लिए कि क्या इसके पिछले चलने वाला उदाहरण सफलतापूर्वक बाहर नहीं निकला है।

एक पीआईडी ​​फ़ाइल की मात्र उपस्थिति इस बात की गारंटी नहीं देती है कि विशेष प्रक्रिया आईडी निश्चित रूप से चल रही है, इसलिए यह विधि 100% मूर्ख नहीं है, लेकिन बहुत सारे उदाहरणों में "पर्याप्त अच्छी" है। जाँच करना कि क्या कोई विशेष PID प्रक्रिया तालिका में मौजूद है, UNIX जैसे ऑपरेटिंग सिस्टम में पूरी तरह से पोर्टेबल नहीं है, जब तक कि आप psउपयोगिता पर निर्भर नहीं होना चाहते , जो सभी उदाहरणों में कॉल करने के लिए वांछनीय नहीं हो सकता है (और मुझे विश्वास है कि कुछ UNIX- जैसे ऑपरेटिंग सिस्टम psवैसे भी अलग तरीके से लागू करें )।

प्रोग्राम द्वारा दो (अच्छी तरह से व्यवहार किए गए) अलग-अलग उदाहरणों को सुनिश्चित करने के लिए लॉक फ़ाइलों का उपयोग किया जाता है, जो एक सिस्टम पर समवर्ती रूप से चल रहे हों, उसी समय कुछ और एक्सेस न करें। यह विचार कार्यक्रम से पहले अपने संसाधन तक पहुँचने से पहले, यह एक लॉक फ़ाइल की उपस्थिति के लिए जाँच करता है, और यदि लॉक फ़ाइल मौजूद है, तो या तो त्रुटि है या इसके दूर होने का इंतजार करें। जब यह मौजूद नहीं होता है, तो संसाधन को "अधिग्रहित" करने की इच्छा रखने वाला प्रोग्राम फ़ाइल बनाता है, और फिर बाद में आने वाले अन्य उदाहरण इस प्रक्रिया के साथ इंतजार करेंगे। बेशक, यह मानता है कि प्रोग्राम "प्राप्त" करता है ताला वास्तव में इसे रिलीज़ करता है और लॉक फ़ाइल को हटाना नहीं भूलता है।

यह काम करता है क्योंकि सभी यूनिक्स-जैसे ऑपरेटिंग सिस्टम के तहत फाइलसिस्टम क्रमबद्धता को लागू करता है , जिसका अर्थ है कि फाइलसिस्टम में केवल एक परिवर्तन किसी भी समय होता है। डेटाबेस और इस तरह के ताले की तरह।


1
यह सही है, जब तक कि लॉक फ़ाइल को मैन्युअल रूप से हटा नहीं दिया जाता है। VMWare प्लेयर इस व्यवहारकर्ता को प्रदर्शित करता है, उदाहरण के लिए, यदि VMWare प्लेयर क्रैश हो जाता है, तो आपको .lckVM की निर्देशिका में एक फ़ाइल को हटाना होगा अन्यथा यह आपको बताएगा कि जब आप इसे शुरू करने का प्रयास करते हैं तो इसका उपयोग होता है।
लॉरेंससी

1
विंडोज के बारे में क्या? यह .lock फाइलें कैसे संभालता है? सब के बाद, यह यूनिक्स की तरह नहीं है।
सराफगोपिया

2
मुझे नहीं लगता कि विंडोज प्रोग्राम के लिए इस तरह से काम करना आम बात है। इस व्यवहार के साथ केवल एक कार्यक्रम जिसे मैंने देखा है वह यूनिक्स / लिनक्स
हैमस्टर

2
लॉरेंस सी, " जब यह मौजूद नहीं है, तो प्रोग्राम संसाधन को" अधिग्रहित "करना चाहता है "; लेकिन ऐसे सिंक्रनाइज़ेशन करने के लिए विशेष रूप से निर्मित उचित कार्य हैं । "फ़ाइल हैक" का उपयोग करने के बजाय उन कार्यों पर भरोसा क्यों न करें?
पचेरियर

1
@Pacerier - इस फैशन में लॉक फाइलें शायद शेल स्क्रिप्ट्स, या प्रोग्राम्स जैसे शेल स्क्रिप्ट्स के साथ इंटरैक्ट कर सकती हैं, क्योंकि यूनिक्स / लिनक्स शेल्स फाइलसिस्टम के साथ बहुत आसानी से, अन्य सिंक्रोनाइज़ेशन प्राइमेट्स के साथ इंटरैक्ट करते हैं। फ़ाइलें भी आसानी से असमान प्रक्रियाओं में बनी रहती हैं। एक उच्च प्रदर्शन कार्यक्रम स्पष्ट रूप से मूल ओएस प्राइमेटीज़ बनाम फ़ाइलों को आंतरिक रूप से या यहां तक ​​कि अन्य प्रक्रियाओं के लिए सिंक्रनाइज़ करना होगा जो कि गोले नहीं हैं।
LawrenceC

14

इन फ़ाइलों को अक्सर डेमॉन द्वारा उपयोग किया जाता है जिन्हें केवल एक बार सिस्टम पर चलाया जाना चाहिए। PID फ़ाइल में आमतौर पर पहले से लॉन्च और चल रहे प्रोग्राम की प्रक्रिया आईडी संख्या मौजूद होती है यदि कोई मौजूद है। इसके अलावा, जब यह शुरू होता है, तो यह लॉक फाइल बनाता है। जब तक लॉक फ़ाइल मौजूद है, यह उपयोगकर्ता के हस्तक्षेप के बिना एक दूसरे को शुरू नहीं करेगा। यदि लॉक फ़ाइल मौजूद है और pid फ़ाइल में उल्लिखित प्रक्रिया आईडी नहीं चल रही है, तो डेमन को "मृत" अवस्था में माना जाता है, जिसका अर्थ है कि यह चलने वाला है, लेकिन संभवतः दुर्घटना या अनुचित शटडाउन के कारण नहीं है । यह कुछ कार्यक्रमों के लिए एक विशेष स्टार्टअप / पुनरारंभ परिदृश्य शुरू कर सकता है। इसे सही तरीके से बंद करने से लॉक फाइल हट जाएगी।


+1 लॉक फाइल और पीआईडी ​​फाइल दोनों के उपयोग के बारे में बताते हुए।
काइल क्रुल

@ कालेब - कृपया बताएं कि पीआईडी ​​फ़ाइल और लॉक फ़ाइल दोनों का उपयोग क्यों किया जाएगा। ऐसा लगता है कि एक पीआईडी ​​फ़ाइल पर्याप्त होगी। यदि पीआईडी ​​फ़ाइल मौजूद है, तो पीआईडी ​​को यह देखने के लिए जांचा जा सकता है कि क्या प्रक्रिया चल रही है, बस एक लॉकफ़ाइल के लिए जाँच की तुलना में कम कदम उठाए, एक पीआईडी ​​फ़ाइल की जाँच करें, और फिर प्रक्रिया के अस्तित्व की पुष्टि करें।
एमवीघन

@Maughan दौड़ की स्थिति से बचने के लिए और कुछ नहीं। कुछ ऐप्स का उपयोग ऐसे समय के लिए किया जाता है जब अभी भी पीआईडी ​​की आवश्यकता होती है लेकिन लॉक को त्याग सकते हैं। लेकिन अधिक बुनियादी स्तर पर यदि आप दोनों ऑपरेशनों के लिए एक फाइल को ओवरलोड करते हैं तो आप सिस्टम में असंगत स्थिति को छोड़ कर क्रैश जैसी असफलताओं के लिए दरवाजा खोलते हैं।
कालेब

8

एक पीआईडी ​​फ़ाइल में एक चल रही प्रक्रिया की प्रक्रिया आईडी शामिल होगी। इसके विभिन्न उपयोग हैं; आप इसे पढ़ सकते हैं और जांच सकते हैं कि प्रक्रिया अभी भी चल रही है और उचित कार्रवाई करें या इसे पढ़ें और प्रक्रिया को मार दें।

एक लॉक फ़ाइल सबसे अधिक संभावित अनुप्रयोग विशिष्ट है। लॉक फ़ाइलों का उपयोग यह इंगित करने के लिए किया जाता है कि कुछ संसाधन उपयोग में है और यह कि एक्सेस की प्रक्रिया को तब तक इंतजार करना चाहिए जब तक कि संसाधन जारी रखने से पहले मुक्त नहीं हो जाते।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.