void child(int pid){
printf("Child PID:%d\n",pid);
exit(0);
}
void parent(int pid){
printf("Parent PID:%d\n",pid);
exit(0);
}
void init(){
printf("Init\n");//runs before the fork
}
int main(){
init();//only runs for parent i.e. runs once
printf("pre fork()");// but this runs for both i.e. runs twice
//why???
int pid = fork();
if(pid == 0){
child(pid); //run child process
}else{
parent(pid);//run parent process
}
return 0;
}
उत्पादन:यूनिक्स फोर्क() सिस्टम कॉल कब चलता है?
Init
pre fork()Parrent PID:4788
pre fork()Child PID:0
मैं एक यूनिक्स OS में कोई प्रक्रिया (मेरे मामले में उबंटू) है। मैं समझ नहीं पा रहा हूं कि यह कैसे काम करता है। मुझे पता है कि fork()
फ़ंक्शन मेरे प्रोग्राम को दो प्रक्रियाओं में विभाजित करता है लेकिन कहां से? क्या यह एक नई प्रक्रिया बनाता है और पूरे मुख्य फ़ंक्शन को फिर से चलाता है, और यदि ऐसा है तो init()
केवल एक बार और printf()
दो बार क्यों चलाया गया?
printf("pre fork()");
दो बार दौड़ता है और init()
केवल एक बार कार्य करता है?
बहुत बहुत शुक्रिया। वास्तव में सहायक: डी – boogie666
वाह, यह बहुत सूक्ष्म है! मेरे द्वारा +1! –
बस एक नई लाइन डालने से बफर को फ्लश नहीं करना चाहिए। एक नियमित फ़ाइल पर पुनर्निर्देशित stdout के साथ कोड चलाएं और आप बिल्कुल वही व्यवहार देखेंगे। stdout * नहीं * लाइन डिफ़ॉल्ट रूप से buffered है जब तक यह एक tty है। –