मुझे रूबी स्क्रिप्ट से शुरू की गई सभी बाल प्रक्रियाओं की पिड्स कैसे मिल सकती हैं?रूबी सूची बाल पिड्स
उत्तर
आप के साथ मौजूदा प्रक्रिया प्राप्त कर सकते हैं:
Process.pid
अधिक जानकारी के लिए http://whynotwiki.com/Ruby_/_Process_management देखते हैं।
फिर आप बच्चे के पिड्स प्राप्त करने के लिए ऑपरेटिंग विशिष्ट आदेशों का उपयोग कर सकते हैं। यूनिक्स आधारित सिस्टम पर इस
# Creating 3 child processes.
IO.popen('uname')
IO.popen('uname')
IO.popen('uname')
# Grabbing the pid.
pid = Process.pid
# Get the child pids.
pipe = IO.popen("ps -ef | grep #{pid}")
child_pids = pipe.readlines.map do |line|
parts = line.split(/\s+/)
parts[2] if parts[3] == pid.to_s and parts[2] != pipe.pid.to_s
end.compact
# Show the child processes.
puts child_pids
की तर्ज मैं स्वीकार करते हैं कि यह शायद सभी यूनिक्स सिस्टम पर काम नहीं करता है के रूप में मेरा मानना है कि ps -ef
के उत्पादन में विभिन्न यूनिक्स जायके पर थोड़ा भिन्न होता है के साथ कुछ होगा।
Process.fork बच्चे के पीआईडी के साथ प्रतिक्रिया करता है। जब आप बच्चों को जन्म देते हैं तो बस उन्हें एक सरणी में ट्रैक रखें। http://ruby-doc.org/core/classes/Process.html#M003148 देखें।
यह एक अच्छा संस्करण होगा लेकिन मेरे मामले में मेरे पास एक ब्लॉक उत्पन्न करने का एक तरीका है और फोर्क काउंटर के माध्यम से उन तरीकों को श्रृंखलाबद्ध करने के लिए फोर्क, सिस्टम, स्पॉन, बैकट्रिक और अन्य सभी कॉलों को ट्रैक करने का एकमात्र तरीका है, लेकिन मुझे उम्मीद थी कि बच्चों की पिड्स – tig
भी sys-proctable
मणि का उपयोग किया जा सकता है:
require 'sys/proctable'
Sys::ProcTable.ps.select{ |pe| pe.ppid == $$ }
यह वास्तव में शांत जटिल है और मंच विशिष्ट है। आप वास्तव में सभी उप-प्रक्रियाओं को नहीं ढूंढ सकते हैं अगर वे जानबूझकर छिपाने की कोशिश करते हैं।
यदि आप केवल स्पॉन्ड प्रक्रियाओं को मारना चाहते हैं तो कई विकल्प हैं। एक परीक्षण ढांचे के लिए मैंने दो चुना: 1. pgid => true
के साथ स्पॉन प्रक्रियाएं 2. MY_CUSTOM_COOKIE=asjdkahf
परिवर्तनीय चर डालें, फिर उस कुकी के साथ प्रोसेस को पर्यावरण में ढूंढें और इसे मार दें।
प्रक्रिया पदानुक्रम को खोजने के लिए ps
का उपयोग करके FYI बहुत अविश्वसनीय है। यदि श्रृंखला में एक प्रक्रिया निकलती है, तो इसकी उप-प्रक्रियाओं को 1
(कम से कम लिनक्स पर) का मूल पिड मिलता है। तो यह लागू करने लायक नहीं है।
- 1. सूची दृश्य getListItemXmlAttributes विधि बाल प्रकाशन आइटम
- 2. सूची सभी प्रकार रूबी
- 3. रूबी मेटाप्रोग्रामिंग विधियों की सूची?
- 4. अभिभावक वर्ग सूची में बाल वर्ग सूचियों का संयोजन
- 5. उम्ब्राको: उपयोगकर्ता नियंत्रण में बाल नोड्स की सूची
- 6. आप पाइथन में सभी बाल प्रक्रियाओं को कैसे सूचीबद्ध करते हैं?
- 7. रूबी पर रूबी के साथ पुन: व्यवस्थित आदेश सूची
- 8. बाल मॉड्यूल
- 9. बाल धागे
- 10. एंड्रॉइड बाल दृश्य ऊंचाई सूची दृश्य सूची में माता-पिता से मेल नहीं खाता
- 11. सिम्फनी 2 - बाल इकाई
- 12. asp.net mvc बाल क्रियाएं
- 13. एक विशिष्ट बाल तत्व
- 14. सोनाटा व्यवस्थापक - बाल व्यवस्थापक वर्ग
- 15. रूबी
- 16. नैन्सी मॉडल बाल वर्ग
- 17. jQuery परिवर्तन बाल पाठ
- 18. बाल प्रक्रियाओं की संख्या
- 19. XPath विशिष्ट बाल नोड
- 20. फोर्क पैरेंट बाल संचार
- 21. LINQ - फ़िल्टर बाल संग्रह
- 22. Jquery $ (this) बाल चयनकर्ता
- 23. jQuery बाल div
- 24. LINQ बाल रिकॉर्ड शून्य
- 25. अभिभावक/बाल संबंध (PHP)
- 26. जुनीट बाल धागे को
- 27. मौजूदा बाल इकाई फ्रेमवर्क
- 28. ग्राफिक्समैजिक/छविमैगिक बाल प्रक्रिया
- 29. सनस्पॉट: बाल मॉडल
- 30. WM_EX_TRANSPARENT बाल विंडो
'Process.pid' प्राप्त करने का एक आसान तरीका वर्तमान प्रक्रिया की पिड देता है, न कि मूल प्रक्रिया। अभिभावक प्रक्रिया पिड प्राप्त करने के लिए, 'Process.ppid' करें। – henrikhodne
टिप्पणियों में बस एक त्रुटि हमें वर्तमान प्रक्रिया की आवश्यकता है, क्योंकि यह बाल प्रक्रियाओं का अभिभावक होगा। – Jamie
बस कुछ सेंट: "ps o pid = --ppid # {pid}" "ps -ef | grep # {pid}" से अधिक प्रभावी हो सकता है और आपको इस मामले में अनियंत्रित लाइनों और फ़ील्ड को फ़िल्टर करने की आवश्यकता नहीं होगी । – timurb