2013-11-03 12 views
9

में एक अजगर प्रक्रिया को मार नहीं सकता है मैंने कई जगहों पर खोज की है लेकिन मुझे कीवर्ड सही नहीं लग रहे हैं। मेरे पास सब्लिमेम में पायथन में एक स्टॉलिंग प्रक्रिया है जो मैक पर मौत के समुद्र तट का कारण बनती है। मैं टूल्स> एक्सेस बिल्ड बटन को नियंत्रित नहीं कर सकता और कंट्रोल + सी काम नहीं करता है। मैं इस प्रक्रिया को कैसे मारूं?उत्कृष्ट पाठ 2

+0

आप समाधान खोजने जबकि , आप एक वाक्यविन्यास त्रुटि में जोड़ सकते हैं और प्रोग्राम को फिर से चला सकते हैं ताकि यह स्वचालित रूप से बंद हो जाए। – ytpillai

उत्तर

12

मुझे सब्लिम में बिना किसी सबूत के मारने की प्रक्रिया को मारने का कोई तरीका नहीं मिला है। लेकिन मुझे सब्लिमे को बहुत कम दर्दनाक बनाने और फिर से खोलने का एक तरीका मिला। यहाँ मेरा रास्ता है।

  1. कमांड-विकल्प-भागने: यह बल-छोड़ने वाली विंडो लाता है।
  2. बल-छोड़ने वाली विंडो आपको पूछेगी कि क्या आप वास्तव में दो बार सुब्लिम छोड़ना चाहते हैं। बस दो बार दर्ज करें।
  3. एक क्रैश रिपोर्टर विंडो खुल जाएगी। मुझे इस खिड़की से नफरत है, क्योंकि यह सबकुछ के ऊपर तैरता है ताकि आप इसे अनदेखा नहीं कर सकें, और इसे बंद करने से मुझे अतिरिक्त कीस्ट्रोक कर सकें, इसलिए मैं disabled it.
  4. उत्कृष्टता को दोबारा खोलें। जब सब्लिमे फिर से खुलता है, तो यह आपके द्वारा खोले जाने से पहले खोले गए सभी फाइलों को खुलता है, जिससे आप वहां वापस ले जाते हैं।

कई लोग सोचते हैं कि सब्लिम को फिर से खोलना बट में दर्द है क्योंकि उन्हें अपने माउस के साथ एप्लीकेशन डायरेक्टरी पर नेविगेट करना पड़ता है, एक प्रक्रिया जिसमें लगभग 10-30 सेकंड लगते हैं। मुझे यह कष्टप्रद लगता था, इसलिए मैंने इसे स्थापित किया ताकि मैं पांच कीस्ट्रोक के साथ शानदार हो सकूं, और मुझे लगभग तीन सेकंड लगते हैं।

सबसे पहले, मैंने Alfred स्थापित किया। इस मामले में, आपको केवल अल्फ्रेड के मुफ्त संस्करण की आवश्यकता है।

अल्फ्रेड इंस्टॉल होने के बाद, निम्न करें:

  1. विकल्प-स्पेस बार अल्फ्रेड खोज पट्टी को लाता है। अल्फ्रेड आपके कंप्यूटर के लिए Google खोज की तरह है।
  2. अक्षरों को लिखें "सु।" अल्फ्रेड सर्च बार के नीचे, विकल्पों का एक गुच्छा दिखाई देता है, और पहला विकल्प सब्लिमे टेक्स्ट 2 है। अल्फ्रेड स्वचालित रूप से खोज परिणामों की सूची में पहली चीज़ को हाइलाइट करता है, ताकि जब आप एंटर दबाएंगे, तो यह हाइलाइट किए गए एप्लिकेशन को लॉन्च करेगा।
  3. एंटर दबाएं। अल्फ्रेड सब्लिम खोलता है। वोला: सब्लिम वापस आ गया है कि आप स्क्रिप्ट चलाने से पहले कैसे थे।

तो, कुल में, एक बार मैं एक प्रक्रिया है कि उदात्त जमा शुरू, मैं निम्नलिखित 10 कीस्ट्रोक्स:

Cmd-विकल्प-भागने में प्रवेश में प्रवेश विकल्प-स्पेस बार सु दर्ज

यह प्रक्रिया करता है फोर्स क्विट एप्लीकेशन विंडो को चारों ओर फांसी छोड़ दें, क्योंकि मुझे अपने सिस्टम में दस अतिरिक्त कीस्ट्रोक जोड़ने के बिना इसे छुटकारा पाने का कोई त्वरित तरीका नहीं मिला है। अगर यह वास्तव में मुझे खराब करता है, तो मैं खिड़की पर क्लिक करता हूं और cmd-w करता हूं, जो खिड़की को बंद करता है।

अन्य कष्टप्रद बात यह है कि सब्लिमे को फिर से लॉन्च करने में कुछ सेकंड लगते हैं, इसलिए आमतौर पर मुझे सब्लिम के भीतर से चीजों को चलाने के लिए परेशान नहीं होता है। इसके बजाए, मैं टर्मिनल पर जाता हूं और वहां चीजें चलाता हूं, ताकि मैं उस स्क्रिप्ट को Ctrl-C कर सकूं जिसे मैं बिना किसी प्रभाव के परीक्षण कर रहा हूं।

इसके अतिरिक्त, टूल्स> रद्द करें बिल्ड विकल्प के लिए एक कीबोर्ड शॉर्टकट है।मैंने इसका कभी भी उपयोग नहीं किया है, लेकिन इसका उपयोग करके और इसके साथ समस्याओं को ठीक करने पर चर्चा की गई है this forum post.

+0

विस्तृत प्रतिक्रिया के लिए धन्यवाद हालांकि मैं टर्मिनल में नियंत्रण + सी के समान कुछ की उम्मीद कर रहा था। कम से कम मैं सोचने में अकेला नहीं हूं कि यह एक समस्या है। – user2483724

+0

मैं प्रदर्शन के निचले दाएं भाग में 'बल छोड़ो अनुप्रयोग' खोलता हूं। यह तारा के समाधान से एक कदम (कमांड-एस्केप) को हटा देता है, और शायद ही कभी सब्लिमे के सबसे कोने के निचले दाएं भाग में कोई कोड है। – Jack

2

मुझे इसे हल करने का एक दिलचस्प तरीका मिला।

पर मेरे निर्माण प्रणाली उदात्त-टेक्स्ट 2 मेरी Makefile जो 2 विकल्प है और ONESHELL निर्देश का उपयोग करता है कहते हैं:

.ONESHELL: 
run: myprogram 
    ./myprogram & 
    echo $$! > "pid.tmp" 

ध्यान दें कि बाद यह मेरे कार्यक्रम शुरू होता है अपने पीआईडी ​​एक फ़ाइल पर सहेजा गया है।

stop: 
    kill -9 `cat pid.tmp` 
    rm pid.tmp 

यह विकल्प प्रक्रिया run आदेश द्वारा शुरू किया मारता है: और मैं एक दूसरे का विकल्प है।

तब मैं अपने निर्माण प्रणाली के लिए कॉन्फ़िगर (उपकरण -> बिल्ड सिस्टम -> नई प्रणाली बिल्ड ...) तो मैं दोनों विकल्पों का उपयोग कर सकते हैं:

{ 
    "cmd": ["make"], 
    "variants": 
    [ 
      { 
        "name": "Run", 
        "cmd": ["make", "run"] 
      }, 
      { 
        "name": "Stop", 
        "cmd": ["make", "stop"] 
      } 
    ] 

}

लेकिन मैं दोनों कॉल करना चाहते हैं उदात्त पर कुंजी बाइंडिंग से विकल्प तो मैं संपादित फ़ाइल "वरीयताएँ -> कुंजी बाइंडिंग - उपयोगकर्ता" इस तरह देखने के लिए:

[ 
{ "keys": ["ctrl+r"], "command": "build", "args": {"variant": "Run"} }, 
{ "keys": ["alt+r"], "command": "build", "args": {"variant": "Stop"} } 
] 

अब अगर मैं Ctrl + r मेरा कार्यक्रम शुरू होता है (और प्रवेश करती है एक अनन्तता पाश) और क एन मैं alt + r दबाता हूं मेरा प्रोग्राम बंद हो जाता है जो लगभग वही था जो मैं चाहता था।

एकमात्र समस्या यह है कि जब मैं alt + r चलाता हूं तो मैं ctrl + r द्वारा उत्पादित आउटपुट को खो देता हूं।

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

run: 
    xterm ./myprogram 

मैं CTRL + C के साथ इसे बंद कर सकते हैं और यह अभ्यस्त काम करने से उदात्त रोक: अन्य तरह से मैंने पाया Makefile पर एक नया टर्म प्रक्रिया पर अपना कार्यक्रम शुरू करने के लिए किया गया था।

5

यह उत्तर पायथन और खिड़कियों के लिए विशिष्ट है। मुझे यकीन नहीं है कि मैक समतुल्य है या नहीं।

एक दौड़ अजगर स्क्रिप्ट कार्य प्रबंधक से समाप्त किया जा सकता। टास्क मैनेजर खोलने के लिए Ctrl+Shift+esc का उपयोग करें। processes टैब पर जाएं और del पर पेस करके python.exe पर मारें। यह केवल स्क्रिप्ट को समाप्त कर देगा और बिना छेड़छाड़ छोड़ देगा।

+0

ओएस एक्स के लिए, आप गतिविधि मॉनिटर पर जा सकते हैं और प्रक्रिया "पायथन" ढूंढ सकते हैं और बल उस प्रक्रिया को छोड़ सकते हैं। आपको याद है, ऐसा करने से मुझे लगता है कि सभी पायथन प्रक्रियाओं को मार डालेगा। – Zizouz212

1

मैंने पाइथन के लिए वीजीरिया के समाधान को "पोर्ट किया" है। हालांकि, अगर आपको अपनी परियोजना के लिए मेकफ़ाइल की आवश्यकता है, तो आपको शायद मेकफ़ाइल विधि के लिए जाना चाहिए। VGarcia के समाधान के

टिप्पणी:

  • VGarcia के समाधान मेरे लिए अच्छा काम किया है, लेकिन मैं एक पंक्ति पर ./myprogram & echo $$! > "pid.tmp" लिखना पड़ा, अन्यथा संग्रहीत पीआईडी ​​खाली किया जा रहा खत्म होगा।

  • मैं मैं सिर्फ एक का निर्माण लक्ष्य myprogram जोड़ा तो चलाने से पहले द्विआधारी निर्माण करना चाहता था और निर्भरता run: myprogram

(मैं जानता हूँ कि यह एक टिप्पणी होना चाहिए, लेकिन मैं के लिए पर्याप्त प्रतिष्ठा नहीं था रखा कि। मैं इसे एक टिप्पणी जब मैं यह कर सकते हैं कर देगा।)

अजगर संस्करण

एक run.py स्क्रिप्ट है कि कार्यक्रम और दुकानों चलाता लिखें प्रक्रिया के पीआईडी ​​(https://docs.python.org/2/library/subprocess.html#subprocess.Popen देखें):

from subprocess import Popen # prefer subprocess32 in Python 2 for Linux/OS X 

# run process as child (still receive process output) 
pid = Popen(['build/myprogram']).pid 

# store pid 
with open('pid.tmp', 'w') as f: 
    f.write(str(pid)) 

एक stop.py स्क्रिप्ट लिखें पीआईडी ​​पढ़ सकते हैं और इस प्रक्रिया को मारने के लिए:

import os, signal 
from subprocess import Popen 

# read PID 
with open('pid.tmp', 'r') as f: 
    pid = f.readline().rstrip() 

# kill process 
os.kill(int(pid), signal.SIGKILL) 

# remove temp file 
os.remove('pid.tmp') 

कॉन्फ़िगर निर्माण:

{ 
    "name": "Python Build", 
    // adapt for your project 
    "cmd": [my_build_cmd], 
    "working_dir": "$project_path", 
    "variants": 
    [ 
     { 
      "name": "Run", 
      "cmd": ["python", "run.py"], 
     }, 
     { 
      "name": "Stop", 
      "cmd": ["python", "stop.py"], 
     } 
    ] 
} 

या आप सभी कार्यों को एक मॉड्यूल में रख सकते हैं और main() में कुछ तर्कों को पार्स करके run और stop पर विभिन्न विधियों को कॉल कर सकते हैं।

सुधार सुझाव 1 (अपने आप की कोशिश की नहीं)

आप अलग अलग परियोजनाओं के लिए अपनी स्क्रिप्ट का पुन: उपयोग कर सकते हैं। इस मामले में:

  1. पैरामीटर के साथ कार्यों में अपनी स्क्रिप्ट बदलें। आप शायद कम से कम def run(bin_path) चाहते हैं। कहीं भी स्क्रिप्ट को किसी भी प्रोजेक्ट से आसानी से एक्सेस कर सकते हैं।

  2. अपने उत्कृष्ट प्रोजेक्ट में, build_systems प्रविष्टि में बिल्ड कॉन्फ़िगरेशन डालें (मान एक सूची है, https://www.sublimetext.com/docs/2/projects.html देखें, थोड़ा पुराना लेकिन प्रयोग योग्य)। आप या तो सीधे "cmd": ["python", "-c", "from script import run; run(bin_path)"] के साथ फ़ंक्शंस को कॉल कर सकते हैं या उपरोक्त सुझाव के अनुसार main() का उपयोग कर सकते हैं।

सुधार सुझाव 2 (अपने आप की कोशिश की नहीं)

आप एक साथ कई प्रक्रियाओं के माध्यम से कार्यक्रम चलाते हैं (गलती से, या कुछ नेटवर्किंग सुविधा का परीक्षण करने के लिए), stop प्रक्रिया केवल पिछले मार डालेगा प्रक्रिया। आप अस्थायी फ़ाइल में एकाधिक पीआईडी ​​स्टोर करने के लिए एल्गोरिदम अनुकूलित कर सकते हैं, फिर तदनुसार प्रत्येक प्रक्रिया को मार दें।

आप मेकफ़ाइल विधि के साथ शेल स्क्रिप्ट के रूप में भी ऐसा कर सकते हैं। किसी भी मामले में, एक ऐसी भाषा चुनना सुनिश्चित करें जिससे आप आसानी से महसूस कर सकें।

-2

SublimeText3 में, टूल्स> रद्द करें बिल्ड: ^C के लिए एक कीबोर्ड शॉर्टकट है। यदि आप बिल्ड लॉग में क्लिक करते हैं और फिर नियंत्रण + सी दर्ज करते हैं, तो यह संदेश [Cancelled] के साथ निर्माण को रोक देगा।

+1

प्रोग्राम नहीं रुक जाएगा, मैंने कोशिश की: ((। टास्क मैनेजर को देखें – ytpillai

0

लॉन्च टास्क मैनेजर या आपके कंप्यूटर पर जो भी प्रोसेस मैनेजर लॉन्च करें (यदि आप नहीं करते हैं, तो एक प्राप्त करें)। संबंधित python.exe और pythonw हटाएं।exe प्रक्रिया

0

मेरे पास एक ही समस्या थी और मुझे बस सब्लिमे टेक्स्ट से आने वाले कार्यक्रम में सिगरेट सिग्नल को संभालने की आवश्यकता थी।

import sys, signal 

def signal_handler(signal, frame): 
    sys.exit(0) 

signal.signal(signal.SIGTERM, signal_handler) 

वहाँ भी है अगर आप नए निर्माण जब पुराने एक अभी भी चल रहा है शुरू, इस से संबंधित एक बग, यह केवल प्रक्रिया समाप्त हो जाता है जब आप टर्मिनल के लिए कुछ प्रिंट: https://github.com/SublimeTextIssues/Core/issues/1049

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