2008-09-19 12 views
8

मैं Windows XP के तहत अपनी प्रक्रिया आईडी के माध्यम से प्रोग्रामेटिक रूप से एक विशेष प्रक्रिया को रोकने और फिर से शुरू करने के विभिन्न तरीकों की तलाश में हूं।विंडोज के तहत किसी बाहरी प्रक्रिया को कैसे रोकें/फिर से शुरू करें?

Process suspend/resume toolSuspendThread/ResumeThread साथ यह होता है लेकिन मल्टी-थ्रेडेड कार्यक्रमों और गतिरोध समस्याओं के बारे में चेतावनी दी है।

PsSuspend ठीक लग रहा है, लेकिन मुझे आश्चर्य है कि अगर यह गतिरोध के बारे में कुछ भी विशेष नहीं करता है या किसी अन्य विधि का उपयोग करता?

पसंदीदा भाषाओं: सी ++/अजगर

+2

एक एसईओ टिप्पणी इस प्रकार है: PsSuspend '-SIGSTOP' मारने या' मारने लिनक्स/यूनिक्स के एक खिड़कियों बराबर की तरह दिखता है -सिगकंट '(और यहां तक ​​कि' killall')। –

उत्तर

0

मुझे लगता है कि वहाँ एक अच्छा कारण है कि विंडोज में कोई SuspendProcess() फ़ंक्शन है वहाँ है। इस तरह के एक समारोह होने से एक अस्थिर प्रणाली के लिए दरवाजा खुलता है। जब तक आप उस प्रक्रिया को स्वयं नहीं बनाते तब तक आप एक प्रक्रिया को निलंबित नहीं करेंगे। यदि आपने स्वयं को उस प्रक्रिया को लिखा है, तो आप प्रक्रिया में एक रोक आदेश को ट्रिगर करने के लिए एक ईवेंट (देखें :: SetEvent() इत्यादि एमएसडीएन में) या किसी अन्य प्रकार के संदेश का उपयोग कर सकते हैं।

5

यदि आप "डिबग डिबगर" (उदाहरण के लिए, logger.exe का उपयोग करके सभी एपीआई windbg.exe द्वारा किए गए कॉल ट्रेस करने के लिए), ऐसा लगता है कि डिबगर SuspendThread()/ResumeThread() का उपयोग करता है इस प्रक्रिया में धागे के सभी डिबग किया जा रहा निलंबित करने के लिए।

PsSuspend (मुझे यकीन है कि नहीं कर रहा हूँ) प्रक्रियाओं को निलंबित करने का एक अलग तरीका का उपयोग कर सकते, लेकिन यह अभी भी अन्य प्रक्रियाओं लटका करने के लिए संभव है: अगर प्रक्रिया आप निलंबित कर रहे हैं एक साझा तुल्यकालन उद्देश्य यह है कि अन्य प्रक्रिया द्वारा की जरूरत है पकड़े , आप किसी भी प्रगति से उस प्रक्रिया को अवरुद्ध कर सकते हैं। यदि दोनों कार्यक्रम अच्छी तरह से लिखे गए हैं, तो जब आप निलंबित कर चुके हैं तो उन्हें फिर से शुरू करना चाहिए, लेकिन सभी कार्यक्रम अच्छी तरह से लिखे गए नहीं हैं। और यदि यह आपके प्रोग्राम का कारण बनता है जो लटकने के लिए निलंबित कर रहा है, तो आपके पास डेडलॉक है।

1

मैं कुछ सॉफ्टवेयर पर http://www.codeproject.com/KB/threads/pausep.aspx परीक्षण किया:

यह ठीक काम करता है।

PsSuspend और पॉज़ेप दो वैध विकल्प हैं।

+0

यदि आप इसका उपयोग करने में सावधान हैं तो यह ठीक काम करता है। यदि आप इसे डेडलॉक बनाने के लिए उपयोग करते हैं तो आप एक डेडलॉक बनाते हैं। –

2

मुझे यकीन नहीं है कि यह नौकरी करता है, लेकिन एमएस सिस्टर्नल्स से प्रोसेसएक्सप्लोरर के साथ आप एक प्रक्रिया निलंबित कर सकते हैं।

यह यहाँ कहा गया है: https://superuser.com/a/155263 और मैं इसे वहां भी नहीं मिला।

2

here पढ़ सकते हैं और आप भी अजगर है कि आप इसे इस तरह उपयोग कर सकते हैं के लिए psutil है:

>>> import psutil 
>>> pid = 7012 
>>> p = psutil.Process(pid) 
>>> p.suspend() 
>>> p.resume() 
संबंधित मुद्दे

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