2012-05-28 19 views
5

से बनाए गए मैं वर्तमान में स्केला प्रक्रिया एपीआई scala.sys.process उपयोग कर रहा हूँ, लेकिन मैं यह पता लगाने की शानएक प्रक्रिया है कि SIGTERM संकेत पर प्रतिक्रिया को समाप्त करने के लिए कैसे नहीं कर पा रहे समाप्त करने के लिए कैसे। मैंने इसे पहले पाइथन में किया है जहां प्रक्रिया पर terminate और send_signal फ़ंक्शन हैं, लेकिन स्केल scala.sys.process.Process ऑब्जेक्ट पर, मैं देखता हूं कि destroy है। मेरे लिए ऐसा लगता है कि स्कैला कक्षा से मेरी प्रक्रिया को नकार देगा, बस सुनिश्चित करने के लिए, और वह नहीं जो मैं चाहता हूं।शान से एक प्रक्रिया स्केला

मैं इस प्रक्रिया को कैसे बता सकता हूं कि इसे स्वयं को साफ करना चाहिए और मेरे स्कैला कोड से बाहर निकलना चाहिए?

val launcher = Process("myprocess", Seq("args")) 
val process = launcher.run() 
process.destroy() //Err... no? terminate or equivalent like in python please? 

संपादित

अधिक विस्तार के लिए: मेरी स्केला प्रक्रिया एक सी ++ उपप्रक्रिया, कि हैंडलर संकेत करने के लिए सुनने लॉन्च कर रहा है (SIGTERM, SIGKILL और की तरह) पता करने के लिए जब बाहर निकलने के लिए। यह अच्छी तरह से परीक्षण किया गया है और यह खुद को सही ढंग से साफ करें। मेरी समस्या यह है कि मुझे नहीं पता कि मेरे स्केल एप्लिकेशन से उस सिग्नल को कैसे भेजा जाए! इस प्रकार, मेरी सी ++ प्रक्रिया हमेशा रोकने के लिए कहा जा रहा है इसके बजाय बाहर खींच लिया और गोली मार दी।

+0

क्या आप सकारात्मक हैं .destroy() 'परिणाम सिगिल में? मेरी बाहरी प्रक्रियाओं के लिए ऐसा लगता है कि SIGTERM – Hamy

+0

अच्छी तरह से विनाश के जावडॉक्स (जिस पर स्कैला आधारित है) कहता है: "उपप्रोसेसर को मारता है। इस प्रक्रिया वस्तु द्वारा प्रतिनिधित्व किया गया उपप्रोसेसर ** जबरन समाप्त कर दिया गया है **" (जोर मेरा) अधिकांश दूसरी भाषा मुझे पता है कि दो विधि हैं: मारें और समाप्त करें (या सिग्नल निर्दिष्ट करने की क्षमता)। लेकिन शायद आंतरिक रूप से, कुछ प्लेटफ़ॉर्म पर, जावा SIGTERM का उपयोग करें। यह सुनिश्चित करने का कोई तरीका नहीं है: ( –

+0

लिनक्स पर, मेरी प्रक्रियाओं को निश्चित रूप से SIGTERM (केवल चेक किया गया) मिलता है। वास्तव में, मुझे सीधे स्कैला/जावा से सिगकिल भेजने का कोई तरीका नहीं मिल रहा है, मुझे एक और उपप्रजाति खोलनी है और kill -9 :-(यह http://stackoverflow.com/questions/10630303/java-process-destroy-source-code-for-linux – Hamy

उत्तर

3

स्कैला Process सामान जावा पर आधारित है, और इसलिए, समान सीमाओं के अधीन है। जावा एक बहुत ही खराब इंटरफ़ेस प्रदान करता है। शायद यह अधिक सिस्टम पर एक ही इंटरफ़ेस का उपयोग करना संभव बनाता है, लेकिन यह पॉज़िक्स सिस्टम पर काम करने वाले लोगों के लिए अविश्वसनीय रूप से सीमित है।

+0

धन्यवाद, ऐसा लगता है कि मेरे उपयोग के मामले में प्लेटफॉर्म आश्रित कोड आवश्यक होगा। –

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