2013-09-06 9 views
5

से बाहर निकल गया है तो मेरे पास मूल प्रक्रिया को कैसे पता चलाना है मेरे पास अग्रभूमि में एक बाल प्रक्रिया चल रही है और उसके पिता पहले ही बाहर निकल चुके हैं।अगर बच्चे पृष्ठभूमि में लॉन्च किया गया है और माता-पिता पहले से ही

proc/$pid/stat फ़ाइल किसी भी अधिक माता पिता पीआईडी ​​शामिल नहीं करता है, तो माता-पिता पहले से ही बाहर निकल गया है और यह मूल माता पिता पीआईडी ​​के बजाय 1 प्रदर्शित

linux$cat /proc/6267/stat 
6267 (test3.sh) S 1 6265 ...... 
#    ^
#     | 
#  I expected to get the origin parent pid but I get 1 

इस व्यवहार को पुनः करने के लिए जल्दी से हम निम्न स्क्रिप्ट का उपयोग कर सकते

test2.sh

#!/bin/sh 
echo "test2=$$" 
./test3.sh & 

test3.sh

#!/bin/sh 
echo "test3=$$" 
sleep 1000 

निष्पादन:

linux$ ./test2.sh 
test2=6318 
test3=6319 
linux$ ps aux | grep test 
6319 root  1484 S {test3.sh} /bin/sh ./test3.sh 
linux$ cat /proc/6319/stat 
6319 (test3.sh) S 1 6318 2138 34816 6....... 
+10

हां, अनाथ प्रक्रियाएं 'init' (pid '1') द्वारा" अपनाई गई "हैं। यह डिज़ाइन द्वारा है, और मेरे ज्ञान के लिए मूल प्रक्रिया समाप्त हो जाने के बाद मूल मूल पिड को पुनर्प्राप्त करने का कोई तरीका नहीं है। –

+10

... और यदि आपने एक साथ एक साथ जोड़ दिया है, तो अंततः पिड्स को पुनर्नवीनीकरण किया जाता है, ताकि संख्या का मतलब यह न हो कि इसका मतलब क्या है। – jthill

उत्तर

1

मुझे नहीं लगता कि आप (पैरेंट) के बाद एक प्रक्रिया की मूल पता कर सकते हैं करते निष्पादन पूरा होने। लेकिन हो सकता है कि आप एक और प्रोग्राम चला सकें जो आपके मूल प्रोग्राम पर नज़र रखता है और लॉग फ़ाइल या कुछ बनाए रखता है। और अनाथ प्रक्रियाएं निश्चित रूप से init द्वारा अपनाई गई हैं।

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