यदि कंप्यूटर 0 पर गिनना शुरू करते हैं, तो init प्रक्रिया में 1 की पिड क्यों होती है?


27

शरीर में यहाँ लगाने के लिए ज्यादा नहीं।


18
pidkill(2)सिस्टम कॉल के लिए 0 का एक विशेष अर्थ है, जहां इसका अर्थ है स्वयं और इसके लिए मेरे प्रक्रिया समूह में किसी भी प्रक्रिया काwaitpid(2) अर्थ है कम से कम। यह उल्लेख नहीं करने के लिए कि लौटने का मतलब है कि हम बच्चे में हैं। fork()0
स्टीफन चेज़ेलस

1
आपको इसे उत्तर के रूप में पोस्ट करना चाहिए
जोनाथन मुलर

3
शून्य झंडे का कारण बनता है जब यह एक रजिस्टर में लोड किया जाता है, तो अधिकांश सीपीयू के स्टेटस रजिस्टरों पर स्वचालित रूप से झंडे लगाए जाते हैं, जिससे इसके लिए विशेष रूप से तुलना / परीक्षण किए बिना एक शाखा को सक्षम किया जाता है। इसलिए इसे "प्रहरी" मान के रूप में बहुत अधिक उपयोग किया जाता है, जिसका अर्थ है "अमान्य", "डेटा का अंत" या "विशेष मामला"। इसलिए भले ही कंप्यूटर 0 पर गिनना शुरू कर दें, लेकिन ऐसे कई मामले होंगे जहां 1 प्रश्न में आवेदन या डेटा संरचना के लिए पहला वैध मूल्य है।
लॉरेंस

4
एक ओर ध्यान दें: कंप्यूटर शून्य पर गिनती शुरू नहीं करते हैं। कई प्रोग्रामिंग भाषाएं और मेरा मानना ​​है कि सभी मशीन भाषाएं ऑफ़सेट का उपयोग करती हैं जहां अन्य (और अधिकांश मनुष्य) अनुक्रमित का उपयोग करते हैं लेकिन, कोई फर्क नहीं पड़ता कि क्या गिनती है। दो तत्वों वाले एक सरणी में दो तत्व होते हैं (उन्हें गिनें), इससे कोई फर्क नहीं पड़ता कि आपकी भाषा ऑफसेट या इंडेक्स द्वारा उन्हें संदर्भित करती है।
जेथिल

यह संभवतः प्रोग्रामिंग के अंतर्निहित प्रतिमानों का विरोध करने का मामला है: विशेष ध्वज मूल्यों (शून्य, नकारात्मक एक) के प्रति प्रोग्रामर का गुरुत्वाकर्षण शून्य-आधारित नंबरिंग सिस्टम के लिए एक समग्रता के कम खींचने को ट्रम्प करता है।
माइकल

जवाबों:


29

प्रक्रियाओं के लिए माता-पिता (PPID) की आवश्यकता होती है। कर्नेल, वास्तविक प्रक्रिया नहीं होने के बावजूद, फिर भी कुछ वास्तविक प्रक्रियाओं जैसे कि कम से कम init का उपयोग कर रहा है, और खुद को प्रक्रिया आईडी दे रहा है। 0 OS के आधार पर यह psआउटपुट में एक प्रक्रिया के रूप में प्रदर्शित हो भी सकता है और नहीं भी प्रदर्शित हो सकता है लेकिन हमेशा प्रदर्शित होता है। PPID के रूप में:

लिनक्स पर जैसे:

$ ps -ef|head
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 09:09 ?        00:00:00 /sbin/init
root         2     0  0 09:09 ?        00:00:00 [kthreadd]
root         3     2  0 09:09 ?        00:00:00 [ksoftirqd/0]
...

सोलारिस पर:

$ ps -ef|head
     UID   PID  PPID   C    STIME TTY         TIME CMD
    root     0     0   0   Oct 19 ?           0:01 sched
    root     5     0   0   Oct 19 ?          11:20 zpool-rpool1
    root     1     0   0   Oct 19 ?           0:13 /sbin/init
    root     2     0   0   Oct 19 ?           0:07 pageout
    root     3     0   1   Oct 19 ?         117:10 fsflush
    root   341     1   0   Oct 19 ?           0:15 /usr/lib/hal/hald --daemon=yes
    root     9     1   0   Oct 19 ?           0:59 /lib/svc/bin/svc.startd
...

यह भी ध्यान दें कि पीआईडी 0(और -1उस मामले के लिए अन्य नकारात्मक मूल्य) के विभिन्न अर्थ हैं जो इस बात पर निर्भर करता है कि कौन सा फ़ंक्शन उन्हें पसंद करता है kill, forkऔर waitpid

अंत में, जबकि इस initप्रक्रिया को पारंपरिक रूप से दी गई है #1, यह कोई और मामला नहीं है जब ओएस स्तर के वर्चुअलाइजेशन का उपयोग सोलारिस ज़ोन की तरह किया जाता है, क्योंकि एक से अधिक initरनिंग हो सकते हैं :

$ ps -ef|head
     UID   PID  PPID   C    STIME TTY         TIME CMD
    root  4733  3949   0 11:07:25 ?           0:26 /lib/svc/bin/svc.configd
    root  4731  3949   0 11:07:24 ?           0:06 /lib/svc/bin/svc.startd
    root  3949  3949   0 11:07:14 ?           0:00 zsched
  daemon  4856  3949   0 11:07:46 ?           0:00 /lib/crypto/kcfd
    root  4573  3949   0 11:07:23 ?           0:00 /usr/sbin/init
  netcfg  4790  3949   0 11:07:34 ?           0:00 /lib/inet/netcfgd
    root  4868  3949   0 11:07:48 ?           0:00 /usr/lib/pfexecd
    root  4897  3949   0 11:07:51 ?           0:00 /usr/lib/utmpd
  netadm  4980  3949   0 11:07:54 ?           0:01 /lib/inet/nwamd

5

विशेष रूप से प्रतिष्ठित प्रक्रिया आईडी के साथ दो कार्य हैं: स्वैपर या शेड्यूल में प्रक्रिया 0 है और पेजिंग के लिए ज़िम्मेदार है, जैसे कि jlliagre पहले उदाहरणों में रखा गया है, और वास्तव में सामान्य उपयोगकर्ता-मोड प्रक्रिया के बजाय कर्नेल का हिस्सा है।

प्रक्रिया ID 1 आमतौर पर init प्रक्रिया है जो सिस्टम को शुरू करने और बंद करने के लिए मुख्य रूप से जिम्मेदार है। मूल रूप से, प्रक्रिया ID 1 को विशेष रूप से किसी भी तकनीकी उपायों द्वारा init के लिए आरक्षित नहीं किया गया था: यह बस इस आईडी के कर्नेल द्वारा आहूत पहली प्रक्रिया होने के स्वाभाविक परिणाम के रूप में थी। अधिक हाल ही में यूनिक्स प्रणालियों में आमतौर पर अतिरिक्त कर्नेल घटक होते हैं जो 'प्रक्रियाओं' के रूप में दिखाई देते हैं, इस मामले में पीआईडी ​​1 सक्रिय रूप से पुराने सिस्टम के साथ स्थिरता बनाए रखने के लिए इनिट प्रक्रिया के लिए आरक्षित है।


4

सामान्य तौर पर, 0 का उपयोग अक्सर 'शून्य संदर्भ' को दर्शाने के लिए किया जाता है। इसका मतलब यह था कि भले ही 0 मान मौजूद हो, लेकिन आप इसका उपयोग नहीं कर सकते क्योंकि आप शून्य को एक विशेष मूल्य का संकेत देना चाहते हैं।

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