हाय वहाँ मैं ऐसे कार्यक्रम पर काम कर रहा हूं जो बच्चों को फेंक देगा और बाद में प्रत्येक बच्चे से अधिक बच्चों को फेंक देगा लेकिन मुझे वह मदद नहीं चाहिए जो मुझे चाहिए साथ में। जब मैं अपना प्रोग्राम चलाता हूं (यहां पर यह एक फ़ंक्शन है लेकिन वही काम करता है) मुझे लगता है कि एक माता-पिता (पीपीआईडी) स्पॉन 3 बच्चे (पीआईडीएस = 1,2,3) होना चाहिए लेकिन मुझे जो मिलता है वह एक ही पीआईडी और पीपीआईडी है 3 बार (मेरा वर्तमान कोड) या इससे पहले कि मैं प्रत्येक माता-पिता के साथ 3 माता-पिता प्राप्त कर रहा था, जिसमें एक बच्चा था और पीपीआईडीएस अलग-अलग पीआईडीएस थे, लेकिन पीपीआईडी पिछले बच्चे पीआईडी के समान ही थे। मेरे नवीनतम प्रयासों में यह कभी बच्चे (बेटे) के ऊपर माता-पिता (पिता) संदेश प्रदर्शित नहीं करता है। यह इस तरह दिखना चाहिएफोर्क() का उपयोग करके 1 बच्चों में से 1 बच्चे (सी ++ नहीं)
[dad] hi am I PID 1234 and I come from ####(dont care what this number is)
[son] hi i am PID 1111 and I come from PPID 1234
[son] hi i am PID 1112 and I come from PPID 1234
[son] hi i am PID 1113 and I come from PPID 1234
यहां मेरा कोड है। यदि संभव हो तो मैं सिर्फ संकेतों की तलाश कर रहा हूं जब तक कि यह सिर्फ एक मूर्खतापूर्ण गलती नहीं है जैसा मैंने किया है "ओह बस बच्चे की प्रक्रिया में कांटा() को ले जाएं" या ऐसा कुछ।
इसके अलावा मेरे पास एक बच्चा है इसलिए मैं आसानी से बच्चों की गिनती कर सकता हूं।
int forking(null)
{
void about(char *);
int i=0;
int j=0;
int child_count =0;
about("dad");
for(i = 0; i < 3; i++){
pid_t child = 0;
child = fork();
if (child < 0) { //unable to fork error
perror ("Unable to fork");
exit(-1);}
else if (child == 0){ //child process
about ("son");
printf("I am child #%d \n",child_count);
child_count++;
exit(0);}
else { //parent process (do nothing)
}
}
for(j = 0; j < 3; j++){
wait(NULL);//wait for parent to acknowledge child process
}
return 0;
}
दो बातें याद करने के लिए: पहला यह है कि एक बार आप अलग किया गया है, बच्चे प्रक्रिया माता पिता की स्मृति की एक प्रति प्राप्त है, और जब बच्चे जैसे को संशोधित करता है परिवर्तनीय वे चर केवल बच्चे में बदल जाते हैं, माता-पिता (या किसी भी "भाई बहन") उन परिवर्तनीय परिवर्तनों को नहीं देख पाएंगे। दूसरी बात यह है कि आप 'else' में 'प्रतीक्षा' पर कॉल करते हैं, दोनों माता-पिता * और * बच्चे को अवरुद्ध करेंगे। –
ओह, और आपके कोड में * अपरिभाषित व्यवहार * का एक बुरा मामला है। आप 'child' चर परिभाषित करते हैं, लेकिन फिर आप इसका उपयोग * पहले * करते हैं। अनियंत्रित स्थानीय चर के पास * अनिश्चित * मान होता है, प्रारंभिक किए बिना उनका उपयोग यूबी की ओर जाता है। आप इस बारे में सोचना चाहेंगे कि आप कहां 'फोर्क' कहलाते हैं। –
ओह तुम्हारा मतलब है pid_t child = 0? आपका क्या मतलब है() माता-पिता और बच्चे दोनों को अवरुद्ध करता है? और स्मृति की प्रति के बारे में क्या आप मुझे एक उदाहरण कोड दे सकते हैं? यह उस बिंदु को देखना आसान बनाता है। – Jite