2013-03-03 4 views
15

लौट जब मैं नीचेgetpid और getppid दो विभिन्न मूल्यों

#include <stdio.h> 
#include <sys/types.h> 
//int i=0; 
int main(){ 

int id ; 
id = fork() ; 
printf("id value : %d\n",id); 
    if (id == 0) 
    { 
    printf ("Child : Hello I am the child process\n"); 
    printf ("Child : Child’s PID: %d\n", getpid()); 
    printf ("Child : Parent’s PID: %d\n", getppid()); 
    } 
    else 
    { 
    printf ("Parent : Hello I am the parent process\n") ; 
    printf ("Parent : Parent’s PID: %d\n", getpid()); 
    printf ("Parent : Child’s PID: %d\n", id); 
    } 

} 

कोड चल मेरे उत्पादन

id value : 20173 
Parent : Hello I am the parent process 
Parent : Parent’s PID: 20172 
Parent : Child’s PID: 20173 
id value : 0 
Child : Hello I am the child process 
Child : Child’s PID: 20173 
Child : Parent’s PID: 1 

है कैसे माता पिता की पीआईडी ​​(20,172) बच्चे के माता पिता के आईडी से अलग कर सकते हैं (1) ? उन दोनों बराबर नहीं होना चाहिए?

उत्तर

24

क्या हो रहा है कि माता-पिता बच्चे के चलने से पहले समाप्त हो रहा है। यह बच्चे को अनाथ के रूप में छोड़ देता है और इसे रूट प्रक्रिया द्वारा 1 के पीआईडी ​​के साथ अपनाया जाता है। यदि आप माता-पिता को समाप्त करने के बजाए देरी डालते हैं या स्टडीन से डेटा पढ़ते हैं तो आपको वह परिणाम दिखाई देगा जो आप उम्मीद करते हैं।

प्रक्रिया आईडी 1 आमतौर पर init प्रक्रिया शुरू करने और प्रणाली को बंद करने के लिए मुख्य रूप से जिम्मेदार है। Init (प्रारंभ करने के लिए छोटा) एक डेमॉन प्रक्रिया है जो अन्य सभी प्रक्रियाओं का प्रत्यक्ष या अप्रत्यक्ष पूर्वज है। wiki link for init

user314104 प्रतीक्षा() और waitpid बताते हैं के रूप में() फ़ंक्शन एक माता पिता की प्रक्रिया एक बच्चे की प्रक्रिया में परिवर्तन के राज्य तक ही निलंबित करने के लिए अनुमति देने के लिए डिजाइन किए हैं। तो आपके अगर कथन की मूल शाखा में प्रतीक्षा करने के लिए एक कॉल माता-पिता को बच्चे को समाप्त करने का इंतजार कर देगी।

+1

या, अधिक पारंपरिक रूप से, प्रतीक्षा करें() और प्रतीक्षापिड()। – user314104

+1

@ जैक्सन ने लिंक के साथ और अधिक जानकारी जोड़ दी। मुझे लगता है कि इसे आपके अच्छे जवाब को पूरा करने की आवश्यकता है। अगर आप वापस वापस नहीं करना पसंद करते हैं। –

0

क्योंकि माता-पिता की प्रक्रिया समाप्त हो जाती है और रिलीज़ होती है, इसकी बाल प्रक्रिया अनाथ बन जाती है, इनिट (प्रारंभिक के लिए छोटा) जिसका पिड 1 अनाथ प्रक्रिया प्राप्त करता है।

संबंधित मुद्दे