2012-05-14 12 views
5

में पिड द्वारा प्रक्रिया की स्थिति प्राप्त करें क्या रूबी में पीआईडी ​​के आधार पर प्रक्रिया की बाल प्रक्रिया की स्थिति प्राप्त करने का कोई तरीका है?रुबी

उदाहरण के लिए, पायथन में आप psutil.Process (पीआईडी) कर सकते हैं .status

+2

मुझे विश्वास है कि प्रोसेस मॉड्यूल में आपको इसकी आवश्यकता है: http://www.ruby-doc.org/core-1.9.3/Process.html – vlasits

+0

आपको किस ओएस (एसएस) को काम करने के लिए इसकी आवश्यकता है? – Phrogz

+1

@vlasits प्रक्रिया मॉड्यूल में चलने की प्रक्रिया, केवल बाहर निकलने वाली प्रक्रियाओं की स्थिति प्राप्त करने के लिए कोई विधि नहीं है। – dbenhur

उत्तर

2

मैं एक चल रहा प्रक्रिया की प्रक्रिया राज्य पाने के लिए एक पोर्टेबल माणिक विधि का पता नहीं है। आप Process.wait कर सकते हैं और $?.exitstatus पर जांच सकते हैं, लेकिन ऐसा लगता है कि आप क्या चाहते हैं। एक POSIX समाधान के लिए, आप

`ps -o=state= -p #{pid}`.chomp 

इस्तेमाल कर सकते हैं पत्र कोड ps प्रक्रिया राज्य के लिए पैदा करता है

PROCESS STATE CODES 
Here are the different values that the s, stat and state output specifiers 
(header "STAT" or "S") will display to describe the state of a process. 
D Uninterruptible sleep (usually IO) 
R Running or runnable (on run queue) 
S Interruptible sleep (waiting for an event to complete) 
T Stopped, either by a job control signal or because it is being traced. 
W paging (not valid since the 2.6.xx kernel) 
X dead (should never be seen) 
Z Defunct ("zombie") process, terminated but not reaped by its parent. 
0

OS X पर, मैं सेटअप एक स्ट्रिंग प्राप्त करने के लिए:

outputstring="ps -O=S -p #{mypid}" 

तो निष्पादित यह% x कॉल में:

termoutput=%x[#{outputstring}] 

यदि आवश्यक हो तो मैं प्रदर्शित कर सकता हूं, या सिर्फ आउटपुट को साफ रखूंगा और कॉल के साथ मिले राज्य पर कार्य कर सकता हूं।

2

मैं वही चीज़ ढूंढ रहा था। यह एक शर्म की बात है प्रोसेस स्टेटस एक लाइव पिड से शुरू करने में सक्षम नहीं प्रतीत होता है। यदि आप किसी बच्चे की प्रक्रिया की सुरक्षित समय की हत्या की तरह कुछ भी करना चाहते हैं तो यह महत्वपूर्ण चीजें हैं।

किसी भी मामले में, यह /proc/$pid/status में दूसरी पंक्ति यदि आप लिनक्स पर कर रहे हैं सबसे अधिक संभावना बहुत ज्यादा एक बाहरी कार्यक्रम से जुड़े कुछ भी की तुलना में तेजी है .: status_line = File.open("/proc/#{pid}/status") {|f| f.gets; f.gets }

+0

बाहरी कार्यक्रमों (और बाहर खोलने) पर भरोसा करने से बचने के लिए सरल और सुरुचिपूर्ण समाधान, धन्यवाद। – Navarro