पीआईडी ​​मान निरंतर क्यों नहीं हैं?


14

यदि हम टाइप करते हैं ps -efतो हमें प्रक्रियाओं की एक सूची मिलती है। पीआईडी ​​नंबर निरंतर क्यों नहीं हैं?

जवाबों:


16

उबंटू पर वे निरंतर हैं। अन्य ऑपरेटिंग सिस्टम पर यह भिन्न हो सकता है।

कर्नेल PID को (RESERVED_PIDS, PID_MAX_DEFAULT) की सीमा में आवंटित करता है। यह प्रत्येक नाम स्थान में क्रमिक रूप से होता है (विभिन्न नामस्थानों में कार्य एक ही आईडी हो सकते हैं)। यदि सीमा समाप्त हो जाती है, तो पीआईडी ​​असाइनमेंट चारों ओर घूमता है।

( /programming/3446727/how-does-linux-determine-the-next-pid )

हालांकि मन ...

  • कर्नेल शेड्यूलिंग एक प्रक्रिया को कांटा कर सकती है ताकि वह संख्याओं को छोड़ सके।
  • उस कार्य के समाप्त होने पर एक PID गायब हो जाएगा।
  • PID_MAX_DEFAULT तक पहुंचने तक PID का पुन: उपयोग नहीं किया जाता है।
  • एक reserverd PID को छोड़ दिया जाता है।

स्टैकओवरफ़्लो पर कुछ विषय:

टिप्पणियों में पीआईडी ​​की अस्मिता का परीक्षण करने के लिए एक कमांड है:

for i in {1..20}; do sh -c 'echo $$'; done

"कर्नेल शेड्यूलिंग एक प्रक्रिया को कांटा कर सकती है ताकि वह संख्याओं को छोड़ सके।" - कर्नेल किस प्रक्रिया को निर्धारित करते समय बना सकता है? यह अजीब लगता है।
user253751

शेड्यूलर के लिए एक प्रक्रिया को कांटा बनाना बहुत आम है। संभवतः यह बिट: lxr.free-electrons.com/source/kernel/pid.c#L125 जो इसे निर्धारित कर रहा है :)
Rinzwind

8

बीच में गायब होने वाली प्रक्रिया आईडी पहले से ही मृत हैं और उनके PID को बाद की प्रक्रियाओं में कर्नेल द्वारा पुन: उपयोग किया जाएगा।

मृत प्रक्रियाओं को प्रक्रिया तालिका (लाश को छोड़कर) में ps -efनहीं दिखाया जाएगा , इसलिए उन्हें नहीं दिखाया जाएगा।


3

आम तौर पर पीआईडी ​​निरंतर है लेकिन जब तक आप कमांड चलाते हैं तब तक कुछ प्रक्रिया मृत हो जाएगी ps -ef

इसके अलावा कुछ प्रक्रियाएं एक अन्य प्रक्रिया का सिर्फ एक उपप्रकार हो सकती हैं जो ps -efकमांड में नहीं दिखाई गई हैं । कुछ विस्तारित परिणाम देखने के लिए और आप निरंतर पीआईडी ​​का उपयोग कर सकते हैंpstree

pstree -p

नमूना उत्पादन:

   ├─teamviewerd(3468)─┬─{teamviewerd}(3474)
│                   ├─{teamviewerd}(3475)
│                   ├─{teamviewerd}(3476)
│                   ├─{teamviewerd}(3477)
│                   ├─{teamviewerd}(3478)

जब आप दौड़ते ps -efहैं तो आप मूल प्रक्रिया को देखते हैं।

$ ps -ef | grep teamviewerd
root      3468     1  0 Jul15 ?        00:07:38 /opt/teamviewer9/tv_bin/teamviewerd -f

2

वे निरंतर हैं। अधिकतम सीमा तक पहुंचने तक पीआईडी ​​को अनुक्रमिक क्रम में सौंपा गया है। इस सीमा के बाद यह फिर से शून्य से शुरू होगा।

तो यह सिर्फ इतना है कि लापता पीआईडी ps -efमृत प्रक्रियाओं के हैं। ध्यान दें कि ps -efकेवल चलने वाली प्रक्रियाओं को सूचीबद्ध करता है।

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