2010-10-21 10 views
11

एक प्रक्रिया प्राप्त करें कहें कि मेरे पास वर्तमान चल रही प्रक्रिया है, मैं इसे जावा में प्रोसेस ऑब्जेक्ट में कैसे बदल सकता हूं? प्रक्रिया पहले से चल रही है, इसलिए मैं किसी और को नहीं फेंकना चाहता हूं, मैं इसे एक प्रक्रिया ऑब्जेक्ट में encapsulate करना चाहता हूं जिसे मैं जावा कोड के भीतर उपयोग कर सकता हूं। की तर्ज पर कुछ:जावा: एक पिड

int pid = getPid(); 
Process proc = magicGetProcess(pid); 

धन्यवाद

+0

मुझे नहीं लगता कि जावा में पर्याप्त प्रक्रिया प्रबंधन क्षमताएं अंतर्निहित हैं। उम्मीद है कि कोई मुझे गलत साबित करेगा। –

+0

'प्रक्रिया' की कौन सी कार्यक्षमताओं में आप सबसे अधिक चाहते हैं? क्या आप 'WaitFor() 'करने का प्रयास कर रहे हैं, या आप इनपुट/आउटपुटस्ट्रीम को अपने ऐप पर रीडायरेक्ट करने में सक्षम हैं, या क्या? मुझे पूरा यकीन है कि आप जो भी मांग रहे हैं वह असंभव है लेकिन हम आपकी वास्तविक आवश्यकताओं में मदद कर सकते हैं। –

+0

वैसे मुझे इस प्रक्रिया में एक विधि में गुजरने की ज़रूरत है जो बहुत अधिक जांच करता है अगर यह अप्रत्याशित रूप से समाप्त हो जाता है और अगर यह किया जाता है तो निकास कोड पकड़ लेता है। – Th3sandm4n

उत्तर

4

मुझे नहीं लगता कि यह केवल builtin लाइब्रेरी का उपयोग संभव है। AFAIK, चल रही प्रक्रिया 'स्वयं पीआईडी ​​प्राप्त करने के लिए पहले से ही गैर-तुच्छ है (feature request और alternate mechanisms देखें)।

java.lang.Process class पर एक त्वरित नज़र से पता चलता है कि आप जेएनआई और मूल कोड का उपयोग करके java.lang.Process के अपने कस्टम कार्यान्वयन को लिखने के बारे में जा सकते हैं। तब आपकी कस्टम कक्षा अतिरिक्त विधियों को लागू कर सकती है, जैसे कि आपके प्रश्न में से एक।

+0

हम्म या ऐसा लगता है। ओह अच्छा। – Th3sandm4n

+0

FYI: java.lang.Process – Ismoh

0

* गैर-बाल प्रक्रिया के निकास कोड को निकालने में निक्स दुनिया में आसान नहीं है, क्योंकि जैसे ही मूल प्रक्रिया ने बच्चे के निकास कोड को उठाया है, बाहर निकलने वाला कोड बस प्रक्रिया के साथ गायब हो जाता है। आप कुछ ट्रेसिंग टूल का उपयोग करके चल रही प्रक्रिया से जुड़ सकते हैं और प्रक्रिया समाप्त होने पर इसका एक्जिट कोड उठा सकते हैं। अधिकांश * निक्स ओएस में कमांड लाइन टूल्स होते हैं जो आपको ऐसा करने देते हैं (जैसे लिनक्स पर स्ट्रेस, सनोस पर ट्रस) एक गैर-घुसपैठ तरीके से। हालांकि, आप केवल अपनी प्रक्रियाओं के खिलाफ या यदि आप रूट के रूप में चलते हैं तो उनका उपयोग कर सकते हैं। एक और विकल्प सभी प्रक्रियाओं के निकास कोड रिकॉर्ड करने के लिए अपने ओएस के ऑडिट उपप्रणाली को कॉन्फ़िगर करना है।

+0

के लिए टूटा हुआ यूआरएल यूनिक्स पर आप गैर-बाल प्रक्रिया के निकास कोड को पकड़ने के लिए 'waitpid()' फ़ंक्शन का उपयोग कर सकते हैं। समस्या इसे जावा से बुला रही है। –

0

आप नहीं कर सकते। प्रक्रिया में हर ऑपरेशन की आवश्यकता है कि प्रक्रिया एक बाल प्रक्रिया है। मनमानी प्रक्रिया नहीं है।

0

आरएमआई का उपयोग करने के बारे में क्या? प्रक्रिया प्रक्रिया को प्रक्रिया ऑब्जेक्ट पास करना संभव है? शायद नहीं, क्योंकि प्रक्रिया Serializable

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