2013-11-14 8 views
5

मैं वर्तमान में सी में कांटा() फ़ंक्शन का अध्ययन कर रहा हूं। मैं समझता हूं कि यह क्या करता है (मुझे लगता है)। मेरा सवाल यह है कि हम इसे निम्नलिखित कार्यक्रम में क्यों देखते हैं?कैसे/क्यों विफल हो सकता है

#include <stdio.h> 
#include <unistd.h> 
#include <stdlib.h> 
int main() 
{ 
    int pid; 
    pid=fork(); 

    if(pid<0)/* why is this here? */ 
    { 
    fprintf(stderr, "Fork failed"); 
    exit(-1); 
    } 
    else if (pid == 0) 
    { 
    printf("Printed from the child process\n"); 
    } 
    else 
    { 
    printf("Printed from the parent process\n"); 
    wait(pid); 
    } 
} 

इस कार्यक्रम हम जाँच लें कि पीआईडी ​​लौटे में < 0 है, जो एक विफलता का संकेत होता है। कांटा() असफल क्यों हो सकता है?

+0

यदि किसी कारण से आप अपने ओएस पर और अधिक प्रक्रिया नहीं कर सकते हैं, तो यह असफल हो जाएगा। हालांकि यह सिर्फ एक ही रास्ता है। – squiguy

उत्तर

1

नई प्रक्रिया को संभव बनाने के लिए पर्याप्त स्मृति उपलब्ध नहीं है।

1

यदि कर्नेल उदाहरण के लिए स्मृति आवंटित करने में विफल रहता है, तो यह बहुत खराब है और fork() विफल होने का कारण बनता है। आदमी पृष्ठ से

http://linux.die.net/man/2/fork

13

:

यहाँ त्रुटि कोड पर एक नज़र डालें

Fork() will fail and no child process will be created if: 
[EAGAIN]   The system-imposed limit on the total number of pro- 
        cesses under execution would be exceeded. This limit 
        is configuration-dependent. 

[EAGAIN]   The system-imposed limit MAXUPRC (<sys/param.h>) on the 
        total number of processes under execution by a single 
        user would be exceeded. 

[ENOMEM]   There is insufficient swap space for the new process. 

(यह ओएस एक्स आदमी पेज से है, लेकिन अन्य प्रणालियों पर कारणों समान हैं।)

8

fork असफल हो सकता है क्योंकि आप असली दुनिया में रहते हैं, कुछ अनगिनत-पुनरावर्ती गणितीय कल्पना-भूमि नहीं, और टी hus संसाधन सीमित हैं। विशेष रूप से, sizeof(pid_t) परिमित है, और यह fork की संख्या पर 256^sizeof (pid_t) की हार्ड ऊपरी सीमा को संभवतः सफल कर सकता है (प्रक्रियाओं में से किसी भी प्रक्रिया के बिना)। इसके अलावा, आपके पास स्मृति की तरह चिंता करने के लिए अन्य संसाधन भी हैं।

+6

"... क्योंकि आप वास्तविक दुनिया में रहते हैं, कुछ अनगिनत-पुनरावर्ती गणितीय कल्पना-भूमि नहीं, और इस प्रकार संसाधन सीमित हैं।" - बहुत अच्छा! – ChiefTwoPencils

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