2011-05-16 17 views
7

मेरे पास एक पायथन स्क्रिप्ट है जो SIGSTOP का उपयोग कर रही है और एक प्रक्रिया को रोकने या फिर से शुरू करने के लिए os.kill के साथ .IGCONT आदेश। क्या यह निर्धारित करने का कोई तरीका है कि संबंधित पीआईडी ​​रोके गए या फिर से शुरू किए गए राज्य में है या नहीं?क्या यह निर्धारित करने का कोई तरीका है कि एक लिनक्स पीआईडी ​​रोका गया है या नहीं?

उत्तर

4

आप अपनी/proc निर्देशिका (/proc/<PID>) से किसी प्रक्रिया के बारे में जानकारी प्राप्त कर सकते हैं।

open(os.path.join('/proc', str(pid), 'stat')).readline().split()[2]=='T' 

संपादित करें:

re.sub(r'\(.*\)', '()', open(os.path.join('/proc', str(pid), 'stat')).readline()).split()[2]=='T' 
+0

os.path.join का उपयोग नहीं कर रहा है ... प्रतीक्षा करें, यह शुद्ध लिनक्स प्रश्न है। – janislaw

+0

@janislaw - धन्यवाद। –

4

कॉल पीएस और स्टेट वैल्यू की जांच करें। डी अबाधित नींद (आमतौर पर आईओ) आर रनिंग या (रन कतार पर) runnable व्यवधान देने योग्य सुप्त (एक घटना को पूरा करने के लिए इंतज़ार कर रहा) एस टी रूका, या तो एक काम पर नियंत्रण संकेत द्वारा या क्योंकि यह पता लगाया जा रहा है। डब्ल्यू पेजिंग (2.6.xx कर्नेल के बाद मान्य नहीं है) एक्स मृत (कभी नहीं देखा जाना चाहिए) जेड डिफंक्ट ("ज़ोंबी") प्रक्रिया समाप्त हो गई है, लेकिन इसके माता-पिता द्वारा इसकाट नहीं लिया गया है।

+0

धन्यवाद, मैंने ps axo fname, stat, pid का उपयोग किया और यह आपके जैसा काम करता है, मुझे नहीं पता था कि इसके लिए स्टेट वैल्यू था। – CobraBytez

2

आप psuti एल उपयोग कर सकते हैं: यह अगले अभिव्यक्ति मूल के साथ एक (संभवतः दुर्लभ) बग ठीक करता है विशेष रूप से, आप इस अजगर अभिव्यक्ति के साथ अपने को चलाने के राज्य पा सकते हैं

>>> import psutil 
>>> pid = 1243 
>>> p = psutil.Process(pid) 
>>> p.status 
0 
>>> str(p.status) 
'running' 
>>> p.status == psutil.STATUS_RUNNING 
True 
>>> 
>>> p.suspend() 
>>> p.status 
3 
>>> str(p.status) 
'stopped' 
>>> p.status == psutil.STATUS_STOPPED 
True 
>>> 
>>> p.resume() 
>>> str(p.status) 
'running' 
>>> 
संबंधित मुद्दे

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