2011-04-08 21 views
6

में एक स्वतंत्र धागा या प्रक्रिया को फैलाना मैं गलत दिशा में इस पर आ रहा हूं, इसलिए किसी भी मदद की सराहना की जाएगी।रुबी

मेरे पास रूबी स्क्रिप्ट है जो अन्य चीजों के साथ एक निष्पादन योग्य शुरू करती है। मैं इस निष्पादन योग्य को शुरू करना चाहता हूं - वर्तमान में सिस्टम का उपयोग करके ट्रिगर किया जा रहा है - और फिर स्क्रिप्ट के साथ जारी रखें। जब स्क्रिप्ट खत्म हो जाती है, तो मैं इसे बाहर निकलना चाहता हूं लेकिन निष्पादन योग्य चलाना छोड़ देता हूं।

मूल रूप से मैं निम्नलिखित

# Do some work 
# Start the executable 
system("executable_to_run.exe") 

# Continue working 

था लेकिन executable_to_run.exe एक अवरुद्ध निष्पादन, और सिस्टम "" है नहीं होगा बाहर निकलें जब तक निष्पादन योग्य चल खत्म

(जो मैं इसे नहीं करना चाहती)

तो मैं अब कुछ इस तरह (काफी कटौती)

# Do some work 
# Start the executable on it's one thread 
Thread.new do 
    system("executable_to_run.exe") 
end 

# Continue working 

यह अच्छी तरह से काम करता है में है कि मेरी स्क्रिप्ट जबकि धागा वें में निष्पादन चलाता प्रदर्शन जारी रख सकते है ई पृष्ठभूमि। दुर्भाग्यवश, जब मेरी स्क्रिप्ट बाहर निकलने के लिए आती है, तो निष्पादन योग्य थ्रेड अभी भी चल रहा है और यह तब तक बाहर नहीं निकलेगा जब तक थ्रेड बाहर निकल न जाए। अगर मैं निष्पादन योग्य को मारता हूं तो थ्रेड निकलता है और स्क्रिप्ट निकलती है।

तो मुझे "execable_to_run.exe" ट्रिगर करना है और इसे पृष्ठभूमि में चलाना छोड़ दें।

मैं विंडोज पर रूबी 1.8.7 का उपयोग कर रहा हूं, जिसका अर्थ है कि कांटा अनुपूरक है। मैं 1.9 तक अपग्रेड नहीं कर सकता क्योंकि आंतरिक और बाहरी टीम निर्भरताएं हैं जिन्हें मुझे पहले हल करने की आवश्यकता है (और जो जल्द ही कभी नहीं किया जाएगा)।

मैं

  • 'स्टार्ट' आदेश के माध्यम से प्रक्रिया चल रहा है की कोशिश की है लेकिन यह अभी भी ब्लॉक
  • निष्पादन धागा पर Thread.kill कॉलिंग लेकिन यह अभी भी निष्पादन योग्य मारे जाने के लिए की आवश्यकता है

तो यह कुछ मैं रूबी में क्या कर सकते हैं और मैं बस कुछ याद कर रहा हूँ या मैं एक समस्या है क्योंकि मैं कांटा का उपयोग नहीं कर सकते हैं?

अग्रिम धन्यवाद

+0

यदि सिस्टम ("execable_to_run.exe" प्रारंभ करें 'ब्लॉक, कुछ गड़बड़ हो गया है। 'स्टार्ट' के बिंदुओं में से एक यह है कि यह एक नई, स्वतंत्र प्रक्रिया शुरू करता है। – cHao

+0

रूबी 1.8.7 विंडोज पर मूल धागे के लिए कोई समर्थन नहीं है क्योंकि विंडोज ने पॉज़िक्स धागे को सही ढंग से कार्यान्वित नहीं किया है। आप यह जानते थे। इस काम को करने का एकमात्र तरीका 'सिस्टम' कॉल के भीतर एक स्वतंत्र प्रक्रिया शुरू करने के लिए विंडोज को मनाने के लिए है। इसका उत्तर देने के लिए आपको एक रूबी व्यक्ति की आवश्यकता होगी। –

उत्तर

3

में मैं बस की कोशिश की और start रूबी 1.8.7 के साथ विंडोज 7 x64 पर ब्लॉक नहीं करता।

system 'start notepad' 
puts 'Exiting now...' 

यह स्पष्ट रूप से विंडोज-विशिष्ट है।

+1

यह निष्पादन योग्य विशिष्ट है। उदाहरण के लिए, कमांड प्रॉम्प्ट में नोटपैड चलाना प्रक्रिया पर नहीं है।नोटपैड शुरू होता है, लेकिन कमांड प्रॉम्प्ट अधिक कमांड के लिए मुक्त हो जाता है। लेकिन निष्पादन योग्य चलाने के लिए मैं कमांड प्रॉम्प्ट में चलाना चाहता हूं प्रक्रिया पर पकड़ लेता है। –

+0

@Lee Winder - क्या कोई अन्य निष्पादन योग्य है जो इस व्यवहार को प्रदर्शित करता है जिसे हम इसका परीक्षण करने के लिए उपयोग कर सकते हैं? क्योंकि मैंने जो भी प्रयास किया है, अब तक 'स्टार्ट प्रोग्राम' के साथ काम किया है। –

4

detunized के जवाब विंडोज़ पर काम करना चाहिए। यह एक क्रॉस-प्लेटफ़ॉर्म है:

pid = spawn 'some_executable' 
Process.detach(pid) #tell the OS we're not interested in the exit status 
+1

मैं इस धारणा के तहत था कि स्पॉन 1.9+ था और 1.8.7 पर उपलब्ध नहीं था? मुझे निश्चित रूप से 'स्पॉन' का उपयोग करके एक अपरिभाषित विधि त्रुटि मिल रही है। –

+1

हाँ, आप सही हैं, यह 1.9 है। मुझे इसके बारे में पता नहीं था। – steenslag