2013-11-03 140 views
9

我在很多地方搜索過,但似乎無法得到正確的關鍵字。我在Sublime中的Python中有一個拖延的過程,導致Mac上的死亡沙灘球。我無法訪問工具>取消生成按鈕,並且Control + C不起作用。我如何殺死這個過程?無法在崇高文本中殺死一個python進程2

+0

當你找到了解決方案:

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

還有,如果你開始時,舊的仍在運行新的版本與此相關的一個bug,當你打印的東西終端只終止進程,您可以添加語法錯誤並再次運行該程序,以便它自動停止。 – ytpillai

回答

12

我還沒有找到一種殺死Sublime中的進程而不殺死所有Sublime的方法。但是我確實找到了一種殺死和重新開啓崇高的方法,讓我們不那麼痛苦。這是我的方式。

  1. Command-option-escape:這將彈出強制退出窗口。
  2. 強制退出窗口會問你是否真的要退出崇高兩次。只需點擊輸入兩次。
  3. 一個撞機記者窗口將打開。我討厭這個窗口,因爲它漂浮在一切之上,所以你不能忽視它,關閉它使我做了額外的擊鍵,所以我disabled it.
  4. 重新打開崇高。當Sublime重新打開時,它會打開您在打開之前打開的所有文件,並將您帶回到原來的位置。

許多人認爲重新開放Sublime是一個痛苦的屁股,因爲他們必須用鼠標導航到應用程序目錄,這個過程大概需要10 - 30秒。我曾經覺得這很煩人,所以我把它設置好,這樣我就可以用五次擊鍵重新打開崇高的東西,而這需要我三秒左右。

首先,我安裝了Alfred。在這種情況下,你只需要免費版本的Alfred。

在安裝阿爾弗雷德,請執行下列操作:

  1. 選項,空格鍵可以調出阿爾弗雷德搜索欄。阿爾弗雷德很像谷歌搜索您的電腦。
  2. 鍵入字母「su」。在Alfred搜索欄下方,出現一堆選項,第一個選項是Sublime Text 2. Alfred自動突出顯示搜索結果列表上的第一項內容,這樣當您按Enter鍵時,它將啓動突出顯示的應用程序。
  3. 點擊進入。阿爾弗雷德打開崇高。 Voila:Sublime回到了你之前的劇本。

所以,在總,一旦我開始沒有響應崇高的過程,我做了以下10個按鍵:

Cmd的選項 - 逃逸進入輸入選項,空格鍵蘇進入

此過程時將強制退出應用程序窗口掛起來,因爲我沒有找到一個快速的方法來擺脫它,而無需向我的系統添加十個額外的按鍵。如果真的讓我感到困擾,我點擊窗口,然後執行cmd-w,關閉窗口。

另一個令人討厭的事情是,Sublime需要幾秒鐘才能重新啓動,所以通常我不打算從Sublime內部運行。相反,我轉到終端並在那裏運行,這樣我就可以按Ctrl-C測試腳本,而不會影響Sublime。

此外,還有一個鍵盤快捷鍵,用於工具>取消構建選項。我從來沒有使用它,但使用它並修復它的問題在this forum post.

+0

感謝您的詳細回覆,雖然我希望能得到類似於控制檯+ c在終端中所做的一些事情。至少我並不孤單,認爲這是一個問題。 – user2483724

+0

我在顯示屏的右下方打開「強制退出應用程序」。它從Tara的解決方案中刪除了一個步驟(命令轉義),並且在Sublime的右下角很少有任何代碼。 – Jack

2

中討論我發現了一個有趣的方法來解決這個問題。在

我的構建系統崇高-text2的打電話給我的Makefile其中有2個選項,並使用ONESHELL指令:

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

需要注意的是啓動我的程序後,它的PID是保存在一個文件中。 ,我有第二個選擇:

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我的程序啓動(並進入無限循環)和WH我按alt + r我的程序停止,這幾乎是我想要的。

剩下的唯一問題是,當我跑alt + r我鬆散ctrl + r產生的輸出。

編輯: 其他辦法,我發現是我的啓動程序上的Makefile中一個新的xterm進程:

run: 
    xterm ./myprogram 

我可以用CTRL + C關閉它,它不會停止工作的崇高。

5

這個答案是特定於python和windows。我不確定是否有一個mac等價物。

正在運行的python腳本可以從任務管理器中終止。使用Ctrl+Shift+esc打開任務管理器。轉到processes選項卡,並簡單地通過del殺死python.exe。這隻會終止腳本,並保持崇高不變。

+0

對於OS X,您可以轉到活動監視器並找到進程「python」並強制退出該進程。請注意,這樣做會殺死我相信的所有python進程。 – Zizouz212

1

我已經將VGarcia的解決方案「移植」到了Python中。但是,如果您無論如何需要項目的Makefile,則應該使用Makefile方法。在VGarcia的解決方案

備註:

  • VGarcia的解決方案爲我工作不錯,但我必須在一行寫./myprogram & echo $$! > "pid.tmp",否則存儲的PID將結束是空的。

  • 我想運行,所以我只是增加了一個構建目標myprogram之前建立二進制,不停的依賴run: myprogram

(我知道這應該是一個評論,但我沒有足夠的聲譽那我會讓它評論時,我可以。)

Python版本

編寫運行程序和存儲run.py腳本進程的PID(見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腳本來讀取PID並強行終止進程:

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()中的一些參數調用不同的方法runstop

改進建議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程序只殺最後一個處理。您可以調整算法以在臨時文件中存儲多個PID,然後相應地終止每個進程。

您也可以使用Makefile方法作爲shell腳本執行此操作。無論如何,一定要選擇一種你感到輕鬆的語言。

-2

在SublimeText3中,有一個鍵盤快捷鍵,用於工具>取消構建:^C。如果在構建日誌中單擊並輸入control + C,它將停止構建並顯示消息[Cancelled]

+1

該程序不會停止,我試過了:(((看看任務管理器 – ytpillai

0

啓動任務管理器或任何您的計算機上的進程管理器(如果你沒有,得到一個)。刪除相應的python.exe和pythonw。exe程序