मेरे पास दो बार फोर्किंग की मुख्य प्रक्रिया है और इस प्रकार दो बच्चे पैदा कर रहे हैं। दोनों बच्चों को इस तरह एक दूसरे के साथ पाइप किया जाता है:अंतिम बच्चा फोर्क नहीं होगा
ls | more
अब समस्या यह है कि दूसरा बच्चा कभी मर नहीं जाता है। ऐसा क्यों है? पाइप में आखिरी बच्चा वास्तव में कब मरता है?
एक को हटाने() कॉल ls | more
के अपेक्षित परिणाम दिखाता है लेकिन कुछ और अजीब व्यवहार (अटक टर्मिनल आदि) देता है। कि यह वास्तव में more
कि मर नहीं है ps axw
साथ
int main(){
printf("[%d] main\n", getpid());
int pip[2], i;
pipe(pip);
/* CHILDREN*/
for (i=0; i<2; i++){
if (fork()==0){
/* First child */
if (i==0){
printf("[%d] child1\n", getpid());
close(1); dup(pip[1]);
close(pip[0]);
execlp("ls", "ls", NULL);}
/* Second child */
if (i==1){
printf("[%d] child2\n", getpid());
close(0); dup(pip[0]);
close(pip[1]);
execlp("more", "more", NULL);}
}
}
wait(NULL); // wait for first child
wait(NULL); // wait for second child
return 0;
}
इस प्रश्न का शीर्षक बहुत हिंसक लगता है। – Marlon
@ मार्लोन हाहा ने इसे अब तक ऐसा नहीं देखा! – Pithikos