प्रक्रिया आईडी का अधिकतम मूल्य क्या है?


42

प्रक्रिया आईडी का अधिकतम मूल्य क्या है?

इसके अलावा, क्या एक प्रक्रिया आईडी बदलना संभव है?

जवाबों:


61

लिनक्स पर, आप इसके साथ अपने सिस्टम के लिए अधिकतम PID मान पा सकते हैं:

$ cat /proc/sys/kernel/pid_max

यह मान उसी फ़ाइल का उपयोग करके भी लिखा जा सकता है, हालाँकि मूल्य केवल 32 बिट सिस्टम के लिए अधिकतम 32768 तक या 64 बिट के लिए 4194304 तक बढ़ाया जा सकता है:

$ echo 32768 > /proc/sys/kernel/pid_max

यह इस मूल्य को 32 बिट सिस्टम पर पाए जाने वाले मान के समान सेट करने के लिए अधिकांश 64 बिट सिस्टम पर मानक अभ्यास लगता है, लेकिन यह एक आवश्यकता के बजाय सम्मेलन द्वारा होता है।

से man 5 proc:

/proc/sys/kernel/pid_max  
  This file (new in Linux 2.5) specifies the value at which PIDs wrap around
  (i.e., the value in this file is one greater than the maximum PID). The
  default value for this file, 32768, results in the same range of PIDs as
  on earlier kernels. On 32-bit platfroms, 32768 is the maximum value for
  pid_max. On 64-bit systems, pid_max can be set to any value up to 2^22
  (PID_MAX_LIMIT, approximately 4 million).

और नहीं, आप एक चल रही प्रक्रिया के पीआईडी ​​को नहीं बदल सकते। यह प्रक्रिया शुरू होने के समय कर्नेल द्वारा अनुक्रमिक संख्या के रूप में निर्दिष्ट किया जाता है और यह उस समय से पहचानकर्ता है। केवल एक चीज जो आप एक नया प्राप्त करने के लिए कर सकते हैं, वह है आपका कोड एक नई प्रक्रिया को लेना और पुराने को समाप्त करना।


और हम साथ गिरी बिट्स के बारे में सुनिश्चित किया जा सकता है इस
कुंभ पावर

2
"पीआईडी ​​को नहीं बदल सकता है" कहानी के लिए एक उत्सुक अर्ध-प्रत्यय एक मल्टीथ्रेडेड प्रोग्राम का मामला है, जहां सहायक थ्रेड्स में से एक निष्पादन () करता है। यह पूरी प्रक्रिया को ओवरले करता है, लेकिन पीआईडी ​​(एग्जीक्यूटिव थ्रेड के TID में) को बदलता है।
22:12 पर fche

3
32-बिट मशीन के लिए एक PID का अधिकतम मूल्य 32767 है, 32768 नहीं। 0 अनुसूचक है और 1 init है, और फिर उपयोगकर्ता प्रक्रियाओं को 32767 के माध्यम से 2 मिलता है।

2
user129258 सही है, और मैनुअल पेज और कर्नेल डोको दोनों के साथ समझौते में। पीआईडी का अधिकतम अनुमत मूल्य , जैसा कि प्रश्न द्वारा अनुरोध किया गया है, उस छद्म फाइल में मूल्य से कम है
JdeBP

1
@ user129258, यह केवल तभी पकड़ता है जब आप init का उपयोग कर रहे हैं। हमेशा एक शेल को सीधे बूट करने की संभावना होती है, चलो बिजीबॉक्स कहते हैं और नौकरी नियंत्रण के बिना वहां से मैन्युअल रूप से काम करते हैं। या यहां तक ​​कि कुछ स्टार्टअप स्क्रैप भी हैं और शेल में वापस आ गए हैं। किसी भी मामले में, शेल ऐसे मामले में पीआईडी ​​1 होगा।
टिम

9

अन्य उत्तरों की व्याख्या की है

  • /proc/sys/kernel/pid_max लिनक्स के लिए और
  • FreeBSD के लिए 99999

लेकिन सवाल एक ऑपरेटिंग सिस्टम को निर्दिष्ट नहीं करता था। तो यहाँ कुछ अन्य हैं:

  • सोलारिस पर, एक प्रोसेस आईडी का अधिकतम मूल्य एक कर्नेल ट्यून करने योग्य पैरामीटर pidmaxहै /etc/system- जिसमें 30,000 तक की चूक है और जिसे 266 और 999,999 के बीच कहीं भी सेट किया जा सकता है। ध्यान दें कि यह नहीं है max_nprocs, जो एक उप-भिन्न फ़ंक्शन के साथ कर्नेल ट्यून करने योग्य पैरामीटर है।
  • HP-UX 10 पर कर्नेल ट्यूबल्स नाम दिया गया है process_id_minऔर process_id_maxस्वीकार्य प्रक्रिया आईडी की सीमा निर्धारित करता है।
  • AIX पर, प्रक्रिया ID में कई फ़ील्ड शामिल होते हैं, जिसमें "प्रोसेस स्लॉट" और "जेनरेशन काउंट" फ़ील्ड शामिल हैं। अधिकतम संभव मान 0x03FFFFFE है, क्योंकि फ़ील्ड एक पूर्णांक के केवल 26 बिट्स पर कब्जा कर लेते हैं, और बिट # 0 हमेशा प्रक्रिया # 1 को छोड़कर शून्य होता है।
  • OpenBSD पर अधिकतम 32766 है।
  • NetBSD पर अधिकतम 30000 है।

OpenBSD 6.5 के अनुसार, अब इंट्रो (2) के अनुसार अधिकतम 99999 है, 32766 नहीं।
काइपी

4

FreeBSD पर PID का मान intro(2)(लिंक) के अनुसार 0 और 99999 के बीच है । यहाँ मैनुअल से एक उद्धरण है:

प्रक्रिया आईडी।
सिस्टम में प्रत्येक सक्रिय प्रक्रिया विशिष्ट रूप से एक गैर-नकारात्मक पूर्णांक द्वारा पहचानी जाती है जिसे प्रक्रिया आईडी कहा जाता है। इस आईडी की रेंज 0 से 99999 तक है।

यदि आप स्वयं स्रोत कोड पढ़ना चाहते हैं तो (लिंक)PID_MAX में परिभाषित किया गया है ।sys/sys/proc.h

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