यदि ऐसी कोई प्रक्रिया है जो एक बड़ी फ़ाइल को पढ़ती है और इसे अपनी स्मृति में सहेजती है (या केवल एक मॉलोकर्ड चार *), और उस मुख्य प्रक्रिया को फोर्क किया जाता है, अगर बाल प्रक्रिया केवल उस स्मृति (या char *) से पढ़ती है, कॉपी-ऑन-राइट के अनुसार, पॉइंटर को सहेजने वाली मेमोरी की प्रतिलिपि नहीं बनाई जाती है, और माता-पिता और बच्चे दोनों एक ही मेमोरी साझा करते हैं जब तक कि उनमें से कोई भी उस स्मृति पर लिखने की कोशिश नहीं करता है, जिस स्थिति में प्रक्रिया स्मृति की एक प्रति बनाता है और वह बदलता है।लिनक्स में कॉपी-ऑन-राइट के साथ फोर्क प्रक्रिया के बीच कितनी मेमोरी साझा की जाती है?
तो मेरा सवाल यह है कि यदि प्रतिलिपि लिखने पर लागू किया गया है, तो क्या बच्चे का उपयोग करने वाली स्मृति की मात्रा को जानने का कोई तरीका है जो मुख्य प्रक्रिया के साथ साझा नहीं किया जाता है? दूसरे शब्दों में, अगर कोई बाल प्रक्रिया वास्तव में उपयोग करती है, तो यह कुछ पढ़ने वाली कॉल से माता-पिता मेमोरी का उपयोग करती है?
शीर्ष, या पीएस कमांड केवल बच्चे की कुल मात्रा को याद करेंगे। (यानी यह मानते हुए कि स्मृति या सूचक में डेटा बच्चे द्वारा प्रतिलिपि बनाई गई है।)
क्या वास्तव में CoW semantics द्वारा उपयोग किए जाने वाले डेटा की मात्रा प्राप्त करने का कोई तरीका है?
मैं /proc/[pid]/smaps
के माध्यम से Aix और Mat द्वारा सुझाए गए अनुसार गया, लेकिन मुझे जो कुछ मिला वह बहुत खाली स्मैश फ़ाइलें थी। tail -n 5 */smaps | less
और ओ/पी है कि मैं मिल गया
==> 1012/smaps <==
==> 1074/smaps <==
==> 10/smaps <==
==> 1148/smaps <==
==> 11862/smaps <==
==> 11/smaps <==
==> 1355/smaps <==
==> 1356/smaps <==
==> 1357/smaps <==
==> 1358/smaps <==
==> 1361/smaps <==
==> 13/smaps <==
==> 14900/smaps <==
==> 14/smaps <==
==> 1501/smaps <==
==> 15/smaps <==
==> 1684/smaps <==
==> 1685/smaps <==
==> 16/smaps <==
==> 17772/smaps <==
==> 17827/smaps <==
==> 17/smaps <==
==> 18490/smaps <==
==> 18/smaps <==
==> 1932/smaps <==
==> 1934/smaps <==
==> 19863/smaps <==
==> 19/smaps <==
==> 1/smaps <==
==> 20125/smaps <==
==> 20126/smaps <==
==> 20127/smaps <==
==> 20128/smaps <==
==> 20129/smaps <==
==> 20134/smaps <==
==> 20135/smaps <==
==> 20811/smaps <==
==> 20868/smaps <==
==> 20/smaps <==
==> 21116/smaps <==
==> 21774/smaps <==
==> 21/smaps <==
==> 22393/smaps <==
==> 22394/smaps <==
==> 22395/smaps <==
==> 22398/smaps <==
==> 22639/smaps <==
==> 22824/smaps <==
==> 22/smaps <==
==> 23009/smaps <==
==> 23058/smaps <==
==> 23059/smaps <==
Private_Dirty: 0 kB
Referenced: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
==> 23835/smaps <==
==> 23961/smaps <==
==> 23962/smaps <==
==> 23963/smaps <==
==> 23964/smaps <==
==> 23/smaps <==
==> 24180/smaps <==
==> 24268/smaps <==
==> 24467/smaps <==
==> 24/smaps <==
==> 252/smaps <==
==> 25352/smaps <==
==> 25435/smaps <==
==> 25/smaps <==
==> 26465/smaps <==
==> 26/smaps <==
==> 27884/smaps <==
==> 27/smaps <==
==> 28/smaps <==
==> 29/smaps <==
==> 2/smaps <==
==> 303/smaps <==
==> 30/smaps <==
==> 316/smaps <==
==> 31/smaps <==
==> 32074/smaps <==
==> 32076/smaps <==
==> 32112/smaps <==
Private_Dirty: 0 kB
Referenced: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
==> 32116/smaps <==
Private_Dirty: 0 kB
Referenced: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
==> 322/smaps <==
==> 32466/smaps <==
==> 32467/smaps <==
==> 32/smaps <==
==> 33/smaps <==
==> 34/smaps <==
==> 37/smaps <==
==> 38/smaps <==
==> 3991/smaps <==
==> 3992/smaps <==
==> 39/smaps <==
==> 3/smaps <==
==> 4005/smaps <==
==> 4006/smaps <==
==> 4007/smaps <==
==> 4008/smaps <==
==> 4009/smaps <==
==> 4010/smaps <==
==> 4018/smaps <==
==> 4029/smaps <==
==> 4038/smaps <==
==> 4044/smaps <==
==> 4045/smaps <==
==> 4046/smaps <==
==> 4053/smaps <==
==> 4054/smaps <==
==> 4055/smaps <==
==> 40/smaps <==
==> 41/smaps <==
==> 42/smaps <==
==> 4339/smaps <==
==> 435/smaps <==
==> 436/smaps <==
==> 43/smaps <==
==> 44/smaps <==
==> 45/smaps <==
==> 46/smaps <==
==> 47/smaps <==
==> 48/smaps <==
==> 49/smaps <==
==> 4/smaps <==
==> 50/smaps <==
==> 51/smaps <==
==> 52/smaps <==
==> 53/smaps <==
==> 54/smaps <==
==> 55/smaps <==
==> 56/smaps <==
==> 57/smaps <==
==> 58/smaps <==
==> 5988/smaps <==
==> 59/smaps <==
==> 5/smaps <==
==> 6058/smaps <==
==> 6059/smaps <==
Private_Dirty: 0 kB
Referenced: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
==> 60/smaps <==
==> 61/smaps <==
==> 62/smaps <==
==> 63/smaps <==
==> 64/smaps <==
==> 65/smaps <==
==> 66/smaps <==
==> 67/smaps <==
==> 68/smaps <==
==> 69/smaps <==
==> 6/smaps <==
==> 70/smaps <==
==> 71/smaps <==
==> 72/smaps <==
==> 73/smaps <==
==> 74/smaps <==
==> 771/smaps <==
==> 77/smaps <==
==> 782/smaps <==
==> 78/smaps <==
==> 79/smaps <==
==> 7/smaps <==
==> 80/smaps <==
==> 814/smaps <==
==> 819/smaps <==
==> 81/smaps <==
==> 82/smaps <==
==> 83/smaps <==
==> 84/smaps <==
==> 8654/smaps <==
==> 8655/smaps <==
==> 8656/smaps <==
==> 892/smaps <==
==> 8/smaps <==
==> 949/smaps <==
==> 950/smaps <==
==> 9/smaps <==
==> self/smaps <==
Private_Dirty: 0 kB
Referenced: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
तो क्या मैं अब क्या करना चाहिए था: मैं जो फ़ाइलों उन में डेटा है खोजने के लिए इस आदेश की कोशिश की? मेरे पास ऐसी प्रक्रियाएं हैं जिनके पास खाली धुएं हैं जो चल रहे हैं। मैं उन पिड की धुंध कैसे प्राप्त करूं?
ऑपरेटिंग सिस्टम पर निर्भर करता है। लिनक्स? – Mat
हाँ ओएस लिनक्स है। –
http://unix.stackexchange.com/questions/33381/getting-information-about-a-process-memory-usage-from-proc-pid-smaps आपको रुचि हो सकती है – Mat