फोर्क() का उपयोग करते समय और आप बच्चे पर निष्पादन कहते हैं, नई प्रक्रिया निष्पादन द्वारा बनाई गई अभी भी एक बच्चा सही है?
जब बच्चा नई प्रक्रिया बच्चे द्वारा नियंत्रित किया जाता पर कार्यकारी बुला। बच्चे की प्रक्रिया को निष्पादन कॉल द्वारा प्रतिस्थापित किया जाता है।
क्या माता-पिता की प्रक्रिया को मारने से बच्चे को भी मार दिया जाता है?
ओएस होने पर माता-पिता की प्रक्रिया मरने पर बच्चे की प्रक्रिया मरने के लिए संभव है (कम से कम लिनक्स में) ओएस को सिग्नल भेजकर, लेकिन अन्यथा यह बस रहता है।
वह प्रतीक्षा/waitpid कॉल करता है, तो माता-पिता की प्रक्रिया पहले समाप्त हो जाता है, बच्चे प्रक्रिया मर जाता है और फिर आप आंशिक या ls कमांड के लिए कोई उत्पादन क्योंकि, यह सही है?
आप बच्चे प्रक्रिया के लिए इंतजार करना चाहते हैं (उदाहरण के रूप में आप की ओर इशारा) ताकि: क) आप सही तरीके से अपने बच्चे की प्रक्रिया समाप्त होने ख समाप्त कर सकते हैं) बच्चे प्रक्रिया सभी की पहुंच है माता-पिता के संसाधन ... जिसका अर्थ है कि अगर आपके बच्चे के पास माता-पिता द्वारा खोला गया फ़ाइल हैंडल है और माता-पिता बाहर निकलते हैं, लेकिन बच्चा मानता है कि फ़ाइल तब तक खुल जाएगी जब तक यह चल रहा है, बुरी चीजें घटित होंगी।
इस त्वरित उदाहरण पर एक नज़र डालें:
void main()
{
if(fork()){
printf("parent print");
}
else
while(1);
printf("done");
}
यहाँ आप होगा:
[email protected]:~> ps
PID TTY TIME CMD
18577 pts/2 00:00:00 bash
18643 pts/2 00:00:00 ps
तो इस छोटे से कार्यक्रम चलाने: सबसे पहले, एक प्रक्रिया सूची के उत्पादन को देखो अभिभावक संदेश "मूल प्रिंट" प्रिंट करें फिर "किया"। एक "ps" सूची की जाँच करें इसके पूर्ण हो जाने और आप मौज-पेड़ में एक नई प्रक्रिया देखेंगे:
[email protected]:~> ps
PID TTY TIME CMD
18577 pts/2 00:00:00 bash
18673 pts/2 00:00:02 a.out
18678 pts/2 00:00:00 ps
a.out, बच्चा है कि जबकि पाश में हमेशा के लिए बैठे, जबकि माता-पिता समाप्त हो गया।
आह, मैं एचयूपी के बारे में सोच रहा था। –