2010-05-10 19 views
8

क्या कोई प्रक्रिया (निष्पादन योग्य से चल रही है) को रोकने का कोई तरीका है ताकि यह रोके जाने पर सीपीयू लोड को रोक दे, और इसके काम के साथ आगे बढ़ने तक प्रतीक्षा न हो जाए? शायद पाइथन में, या किसी तरह से अजगर द्वारा सुलभ।एक प्रक्रिया को रोकना?

+0

क्या आपका मतलब थ्रेड या चलने वाली सिस्टम प्रक्रिया है? – ukanth

+1

एक चल रही सिस्टम प्रक्रिया। –

+0

मैं इसे "रोकना" की बजाय कम प्रक्रिया प्राथमिकता के इच्छुक हूं। इस तरह अन्य प्रक्रियाएं पहले –

उत्तर

4

आप SIGTSTP के बारे में सोच रहे हैं - एक ही सिग्नल होता है जब आप CTRL-Z दबाते हैं। यह तब तक प्रक्रिया को निलंबित करता है जब तक यह SIGCONT प्राप्त नहीं हो जाता है।

बेशक, कुछ प्रोग्राम सिर्फ इस सिग्नल को पकड़ और अनदेखा कर सकते हैं, इसलिए यह निष्पादन योग्य पर निर्भर करता है। हालांकि, अगर आप इसे मैन्युअल रूप से निलंबित और फिर से शुरू कर सकते हैं, तो आप इसे एक अजगर कार्यक्रम से भी कर सकते हैं। os.kill()

+0

पर जाएंगी और मैं इसे कैसे रद्द कर दूं ताकि यह पहले से कहां से काम जारी रखे? –

+0

इसे एक सिगकंट –

+7

भेजें सिगस्टॉप को अवरुद्ध नहीं किया जा सकता है और इस संदर्भ में थोड़ा अधिक सटीक होगा, एक tty से नहीं आ रहा है। http://en.wikipedia.org/wiki/SIGSTOP – msw

1

एक (लगभग) देशी अजगर में ऐसा करने का तरीका नहीं है, और यह काफी सरल है: इस में

import time 
time.sleep(5) 

स्निपेट, 5सेकंड की संख्या है जो आप अपने प्रोग्राम को रोकना चाहते हैं।

+1

यह प्रश्न का उत्तर नहीं देता है; जो * एक और * प्रक्रिया को रोकने के बारे में है। – bfontaine

2

मैं सिर्फ इस संकेतों के साथ अजगर कुछ में इस तरह लागू किया:

def mysignalhandler(sig, frame): 
    print "Got " + str(sig) 
    if sig == signal.SIGUSR1: 
    do_something() 

signal.signal(signal.SIGUSR1, mysignalhandler) 

signal.pause() 

यह अंतिम पंक्ति पर रोक सकते हैं और फोन do_something() जब यह एक

kill -USR1 <pid> 
के माध्यम से, संकेत USR1 प्राप्त करता है, उदाहरण के लिए होगा

कमांड।

यह केवल यूनिक्स में ही काम करेगा।

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