पायथन स्क्रिप्ट को चलने से कैसे रोकें / समाप्त करें?


104

मैंने IDLE में टेक्स्ट फ़ाइलों को टोकन करने के लिए एक कार्यक्रम लिखा था और यह tokeniza 349 टेक्स्ट फ़ाइलों को शुरू करता है! हम इसे कैसे रोक सकते हैं? मैं चल रहे पायथन कार्यक्रम को कैसे रोक सकता हूं?


5
ctrl+cइसे मार देना चाहिए। वैकल्पिक रूप से, kill -9यह
xbonez

1
यहाँ कई उत्तर प्लेटफ़ॉर्म-विशिष्ट हैं। अपने प्लेटफ़ॉर्म (विंडोज, लिनक्स, मैक, कुछ और?) के लिए खोजें
ट्रिपल

जवाबों:


60

अपने कार्यक्रम को रोकने के लिए, बस Control + दबाएं C


23
यह विधि मेरे विंडोज़ लैपटॉप पर काम करती है, लेकिन मेरे लिनक्स डेस्कटॉप पर, यह ^Cटर्मिनल में दिखा और सिस्टम मॉनिटर ने दिखाया कि अजगर अभी भी सीपीयू का बहुत अधिक उपयोग कर रहा है ...
user3768495

क्या इसे रोकने के बाद स्क्रिप्ट को फिर से शुरू करना संभव है?
गाथाईडे

9
@Gathide यदि आप प्रक्रिया को रोकना चाहते हैं और इसे पृष्ठभूमि में रखना चाहते हैं, तो Ctrl + Z(कम से कम लिनक्स पर) दबाएँ । फिर, यदि आप इसे मारना चाहते हैं, तो kill %nदबाएं जहां "एन" वह संख्या है जिसे आपने दबाए जाने पर "स्टॉप्ड" के बगल में मिला है Ctrl + Z। यदि आप इसे फिर से शुरू करना चाहते हैं, तो दौड़ें fg
क्लर्क

यदि आपके पास एक सामान्य को छोड़कर काम नहीं करता है: कार्यक्रम में खंड। सिवाय: रुकावट को पकड़ता है, कुछ करता है (या नहीं), और फिर कार्यक्रम सहजता से जारी रहता है।
ड्रैगनलॉर्ड

116

यदि आप exit()अपने कोड में फ़ंक्शन का उपयोग करते हैं तो आप यह भी कर सकते हैं । अधिक आदर्श रूप से, आप कर सकते हैं sys.exit()sys.exit()जो हो सकता है अजगर समाप्त भले ही आप के माध्यम से समानांतर में बातें चल रहे हैं multiprocessingपैकेज।

नोट: उपयोग करने के लिए sys.exit(), आपको इसे आयात करना होगा:import sys


8
नोट: मुझे ऐसे उदाहरण मिल सकते हैं जिनमें sys.exit(1)प्रक्रिया बंद नहीं होती है। मेरे पास मूल रूप से कई धागे हैं और उनमें से प्रत्येक बाहरी प्रक्रियाओं पर शुरू होता है Popen। मुझे पायथन प्रक्रिया द्वारा बनाई गई सभी उप-प्रक्रियाओं और साथ ही पायथन प्रक्रिया को मारने के लिए एक परमाणु विकल्प की आवश्यकता है। अब तक नहीं मिला।
प्रात

sys.exit () प्रक्रिया को नहीं मारता है लेकिन SystemExit अपवाद को बढ़ाता है जो प्रोग्राम को बंद करके निष्पादन को रोक नहीं देता है
c24b

37

यदि आपका प्रोग्राम एक संवादात्मक कंसोल पर चल रहा है, तो दबाने CTRL+ से मुख्य धागे पर Cएक KeyboardInterruptअपवाद बढ़ जाएगा।

यदि आपका पायथन प्रोग्राम इसे नहीं पकड़ता है, तो KeyboardInterruptपायथन के बाहर निकलने का कारण होगा। हालांकि, एक except KeyboardInterrupt:ब्लॉक, या नंगे जैसा कुछ except:, इस तंत्र को वास्तव में स्क्रिप्ट को चलने से रोक देगा।

कभी-कभी अगर KeyboardInterruptकाम नहीं कर रहा है तो आप SIGBREAKइसके बजाय एक संकेत भेज सकते हैं ; विंडोज पर, CTRL+ Pause/Breakएक दुभाषिया KeyboardInterruptअपवाद पैदा किए बिना दुभाषिया द्वारा नियंत्रित किया जा सकता है।

हालांकि, ये तंत्र मुख्य रूप से केवल तभी काम करते हैं जब पायथन दुभाषिया चल रहा है और ऑपरेटिंग सिस्टम घटनाओं का जवाब दे रहा है। यदि पायथन दुभाषिया किसी कारण से प्रतिक्रिया नहीं दे रहा है, तो सबसे प्रभावी तरीका है कि पूरे ऑपरेटिंग सिस्टम की प्रक्रिया को समाप्त करना जो दुभाषिया चल रहा है। इसके लिए तंत्र ऑपरेटिंग सिस्टम द्वारा भिन्न होता है।

यूनिक्स-शैली के शेल वातावरण में, आप कंसोल को नियंत्रित करने वाली जो भी प्रक्रिया है, उसे निलंबित करने के लिए CTRL+ दबा सकते हैं । एक बार जब आपको शेल प्रॉम्प्ट वापस मिल जाता है, तो आप निलंबित नौकरियों को सूचीबद्ध करने के लिए उपयोग कर सकते हैं , और आप पहले निलंबित नौकरी को मार सकते हैं । (यदि आप इसे फिर से चालू करना चाहते हैं, तो आप उपयोग करके अग्रभूमि में काम जारी रख सकते हैं, अधिक जानकारी के लिए नौकरी नियंत्रण पर अपने शेल मैनुअल को पढ़ें।)Zjobskill %1fg %1

वैकल्पिक रूप से, यूनिक्स या यूनिक्स जैसे वातावरण में, आप पायथन प्रक्रिया के पीआईडी ​​(प्रक्रिया पहचानकर्ता) को पा सकते हैं और पीआईडी ​​द्वारा इसे मार सकते हैं। कुछ ps aux | grep pythonखोजने के लिए उपयोग करें जैसे कि पायथन प्रक्रियाएं चल रही हैं, और फिर संकेत kill <pid>भेजने के लिए उपयोग करें SIGTERM

killयूनिक्स पर आदेश भेजता है SIGTERMडिफ़ॉल्ट रूप से, और एक अजगर कार्यक्रम के लिए एक संकेत हैंडलर स्थापित कर सकते हैं SIGTERMका उपयोग कर signalमॉड्यूल। सिद्धांत रूप में, किसी भी सिग्नल हैंडलर के लिए SIGTERMप्रक्रिया को शालीनतापूर्वक बंद करना चाहिए। लेकिन कभी-कभी अगर प्रक्रिया अटक जाती है (उदाहरण के लिए, एक अबाधित IO नींद की स्थिति में अवरुद्ध), तो SIGTERMसिग्नल का कोई प्रभाव नहीं पड़ता है क्योंकि प्रक्रिया भी इसे संभालने के लिए जाग नहीं सकती है।

संकेतों को प्रतिसाद न देने वाली प्रक्रिया को जबरन मारने के लिए, आपको SIGKILLसंकेत भेजने की आवश्यकता होती है , कभी-कभी इसे संदर्भित किया जाता है kill -9क्योंकि स्थिर 9का संख्यात्मक मान है SIGKILL। कमांड लाइन से, आप एक भेजने और तुरंत चलने वाली प्रक्रिया को रोकने के लिए kill -KILL <pid>(या kill -9 <pid>संक्षेप में) का उपयोग कर सकते हैं SIGKILL

विंडोज पर, आपके पास प्रक्रिया संकेतों की यूनिक्स प्रणाली नहीं है, लेकिन आप TerminateProcessफ़ंक्शन का उपयोग करके किसी चल रही प्रक्रिया को जबरन समाप्त कर सकते हैं । पारस्परिक रूप से, ऐसा करने का सबसे आसान तरीका टास्क मैनेजर खोलना है, उस python.exeप्रक्रिया को ढूंढें जो आपके प्रोग्राम से मेल खाती है, और "एंड प्रोसेस" बटन पर क्लिक करें। आप taskkillसमान उद्देश्यों के लिए कमांड का उपयोग भी कर सकते हैं।


31
  • एक अजगर स्क्रिप्ट को रोकने के लिए बस दबाएं Ctrl + C
  • एक स्क्रिप्ट के साथ exit(), आप इसे कर सकते हैं।
  • आप इसे केवल बाहर निकलने के साथ एक इंटरैक्टिव स्क्रिप्ट में कर सकते हैं।
  • आप उपयोग कर सकते हैं pkill -f name-of-the-python-script

अंतिम विकल्प विशेष रूप से तब उपयोगी होता है जब आप स्क्रिप्ट को एक अलग मोड में चलाते हैं, जैसेpython script.py&
richar8086

26

Ctrl -C यह Ctrl-C से अधिक शक्तिशाली है


4
जैसे डैनियल प्राइडेन ने अपने जवाब में स्पष्ट किया, कीबोर्ड पर ब्रेक कुंजी को पॉज़ भी कहा जा सकता है, उन लोगों के लिए जो मेरी तरह भ्रमित थे। :)
जेक स्ट्रांग

25

किसी रनिंग प्रोग्राम को रोकने के लिए, Ctrl+ का उपयोग करेंC लिए, प्रक्रिया को समाप्त करने के का ।

अजगर में प्रोग्रामेटिक रूप से इसे संभालने के लिए, sysमॉड्यूल को आयात करें और sys.exit()जहां आप प्रोग्राम को समाप्त करना चाहते हैं , उसका उपयोग करें ।

import sys
sys.exit()

17

कीबोर्ड का उपयोग करके एक अजगर स्क्रिप्ट को रोकने के लिए: Ctrl+C

कोड का उपयोग करके इसे रोकने के लिए (यह मेरे लिए पायथन 3 पर काम कर चुका है):

import os
os._exit(0)

आप भी उपयोग कर सकते हैं:

import sys
sys.exit()

या:

exit()

या:

raise SystemExit

4

Ctrl + Z इसे करना चाहिए, यदि आप अजगर शेल में पकड़े गए हैं। ध्यान रखें कि स्क्रिप्ट के उदाहरण पृष्ठभूमि में चलते रह सकते हैं, इसलिए लाइनक्स के तहत आपको संबंधित प्रक्रिया को मारना होगा।


यह (कई) समानांतर प्रक्रियाओं को चलाते समय उपयोगी है और CTRL-C सिर्फ उन सभी को नहीं मारेंगे। CTRL-Z के बाद, आप जाँच कर सकते हैं jobsया psफिर kill 8923754या जो भी jobid / प्रक्रिया आईडी आपको मारने की आवश्यकता है
पॉल

3

जब मेरे पास एक लिनक्स स्क्रिप्ट है जो एक लिनक्स टर्मिनल पर चलती है, CTRL + \ वर्क्स। (CRTL + C या D नहीं)


3

Control+ Dविंडोज 10 पर भी मेरे लिए काम करता है, डाल exit()अंत भी काम करता है पर।


3

बाहर निकलें () कर्नेल को मार देंगे यदि आप ज्यूपिटर नोटबुक में हैं तो यह एक अच्छा विचार नहीं है। raiseकमांड प्रोग्राम को रोक देगा।


2

आप Activity Monitorपाई प्रक्रिया को रोकने के लिए भी उपयोग कर सकते हैं



0

प्रेस Ctrl+ Alt+ Deleteऔर कार्य प्रबंधक पॉप अप होगा। पायथन कमांड को चलाएं, उस पर राइट क्लिक करें और स्टॉप या किल पर क्लिक करें।


0

यदि आप स्पाइडर के साथ काम कर रहे हैं, तो CTRL + का उपयोग करें (डॉट) और आप कर्नेल को पुनरारंभ करेंगे, साथ ही आप प्रोग्राम को रोक देंगे।


0

विंडोज समाधान: Control + C

मैकबुक समाधान: Control (^) + C

एक अन्य तरीका है कि टर्मिनल खोलें, टाइप करें top, PIDउस प्रक्रिया को लिखें जिसे आप मारना चाहते हैं और फिर टर्मिनल पर टाइप करें:kill -9 <pid>

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.