Làm cách nào để dừng / chấm dứt chạy tập lệnh python?


104

Tôi đã viết một chương trình trong IDLE để mã hóa các tệp văn bản và nó bắt đầu mã hóa tệp văn bản 349! Làm thế nào tôi có thể ngăn chặn nó? Làm cách nào để dừng một chương trình Python đang chạy?


5
ctrl+cnên giết nó. Ngoài ra, kill -9
xbonez

1
Nhiều câu trả lời ở đây là dành riêng cho nền tảng. Tìm kiếm nền tảng của bạn (Windows, Linux, Mac, thứ gì khác?)
tripleee

Câu trả lời:


60

Để dừng chương trình của bạn, chỉ cần nhấn Control + C.


23
Phương pháp này làm việc trên máy tính xách tay các cửa sổ của tôi, nhưng trên máy tính để bàn Linux của tôi, nó cho thấy ^Ctại nhà ga và trăn màn hình hệ thống cho thấy vẫn còn sử dụng rất nhiều CPU ...
user3768495

Có thể tiếp tục tập lệnh sau khi dừng nó không?
Gathide

9
@Gathide Nếu bạn muốn tạm dừng quá trình và đặt nó ở chế độ nền, hãy nhấn Ctrl + Z(ít nhất là trên Linux). Sau đó, nếu bạn muốn giết nó, hãy chạy kill %ntrong đó "n" là số bạn nhận được bên cạnh "Đã dừng" khi bạn nhấn Ctrl + Z. Nếu bạn muốn tiếp tục nó, hãy chạy fg.
cluxter

Không hoạt động nếu bạn có mệnh đề chung ngoại trừ: trong chương trình. Ngoại trừ: bắt ngắt, thực hiện điều gì đó (hoặc không), và sau đó chương trình vui vẻ tiếp tục.
DragonLord ngày

116

Bạn cũng có thể làm điều đó nếu bạn sử dụng exit()hàm trong mã của mình. Lý tưởng hơn là bạn có thể làm được sys.exit(). sys.exit()điều này có thể chấm dứt Python ngay cả khi bạn đang chạy mọi thứ song song thông qua multiprocessinggói.

Lưu ý: Để sử dụng sys.exit(), bạn phải nhập nó:import sys


8
Lưu ý: Tôi có thể tìm thấy các ví dụ trong đó sys.exit(1)không dừng quá trình. Về cơ bản, tôi có nhiều luồng và mỗi luồng chặn trên các quy trình bên ngoài được bắt đầu bởi Popen. Tôi cần một tùy chọn hạt nhân để giết tất cả các quy trình con được tạo bởi quy trình Python cũng như chính quy trình Python. Không tìm thấy cho đến nay.
Dici

sys.exit () không giết quá trình nhưng nâng SystemExit Exception không ngừng thực thi bằng cách đóng chương trình
c24b

37

Nếu chương trình của bạn đang chạy trên bảng điều khiển tương tác, nhấn CTRL+ Csẽ tạo ra một KeyboardInterruptngoại lệ trên chuỗi chính.

Nếu chương trình Python của bạn không bắt được nó, điều KeyboardInterruptnày sẽ khiến Python thoát ra. Tuy nhiên, một except KeyboardInterrupt:khối, hoặc một cái gì đó giống như một khối trống except:, sẽ ngăn cơ chế này thực sự ngăn tập lệnh chạy.

Đôi khi nếu KeyboardInterruptkhông hoạt động, bạn có thể gửi SIGBREAKtín hiệu thay thế; trên Windows, CTRL+ Pause/Breakcó thể được trình thông dịch xử lý mà không tạo ra KeyboardInterruptngoại lệ có thể bắt được.

Tuy nhiên, các cơ chế này chủ yếu chỉ hoạt động nếu trình thông dịch Python đang chạy và phản hồi các sự kiện của hệ điều hành. Nếu trình thông dịch Python không phản hồi vì lý do nào đó, cách hiệu quả nhất là chấm dứt toàn bộ quy trình hệ điều hành đang chạy trình thông dịch. Cơ chế cho việc này khác nhau tùy theo hệ điều hành.

Trong môi trường shell kiểu Unix, bạn có thể nhấn CTRL+ Zđể tạm dừng bất kỳ quá trình nào hiện đang điều khiển bảng điều khiển. Khi bạn nhận được lời nhắc trình bao trở lại, bạn có thể sử dụng jobsđể liệt kê các công việc bị tạm ngừng và bạn có thể loại bỏ công việc bị tạm ngừng đầu tiên với kill %1. (Nếu bạn muốn bắt đầu chạy lại, bạn có thể tiếp tục công việc ở nền trước bằng cách sử dụng fg %1; đọc hướng dẫn sử dụng shell của bạn về điều khiển công việc để biết thêm thông tin.)

Ngoài ra, trong môi trường giống Unix hoặc Unix, bạn có thể tìm thấy PID (mã định danh quy trình) của quy trình Python và loại bỏ nó bằng PID. Sử dụng một cái gì đó như ps aux | grep pythonđể tìm các quy trình Python nào đang chạy, sau đó sử dụng kill <pid>để gửi SIGTERMtín hiệu.

Các killlệnh trên Unix gửi SIGTERMtheo mặc định, và một chương trình Python có thể cài đặt một handler tín hiệu cho SIGTERMviệc sử dụng signalmô-đun. Về lý thuyết, bất kỳ trình xử lý tín hiệu nào cho SIGTERMnên tắt quá trình một cách duyên dáng. Nhưng đôi khi nếu quy trình bị kẹt (ví dụ: bị chặn ở trạng thái ngủ IO không ngừng), một SIGTERMtín hiệu sẽ không có tác dụng vì quy trình thậm chí không thể thức dậy để xử lý.

Để giết một quá trình không phản hồi tín hiệu, bạn cần gửi SIGKILLtín hiệu, đôi khi được gọi là kill -99là giá trị số của SIGKILLhằng số. Từ dòng lệnh, bạn có thể sử dụng kill -KILL <pid>(hoặc kill -9 <pid>viết tắt) để gửi SIGKILLvà dừng quá trình đang chạy ngay lập tức.

Trên Windows, bạn không có hệ thống Unix của các tín hiệu quy trình, nhưng bạn có thể buộc phải chấm dứt một quy trình đang chạy bằng cách sử dụng TerminateProcesshàm. Về mặt tương tác, cách dễ nhất để làm điều này là mở Trình quản lý tác vụ, tìm python.exequy trình tương ứng với chương trình của bạn và nhấp vào nút "Kết thúc quy trình". Bạn cũng có thể sử dụng taskkilllệnh cho các mục đích tương tự.


31
  • Để dừng một tập lệnh python, chỉ cần nhấn Ctrl + C.
  • Bên trong một tập lệnh với exit(), bạn có thể làm điều đó.
  • Bạn có thể làm điều đó trong một tập lệnh tương tác chỉ cần thoát.
  • Bạn có thể sử dụng pkill -f name-of-the-python-script.

Tùy chọn cuối cùng đặc biệt hữu ích khi bạn chạy tập lệnh ở chế độ tách rời, ví dụpython script.py&
richar8086

26

Ctrl-Break nó mạnh hơn Ctrl-C


4
Giống như Daniel Pryden đã làm rõ trong câu trả lời của mình, phím Break trên bàn phím cũng có thể được gắn nhãn Pause, dành cho những người bối rối như tôi. :)
JakeStrang

25

Để dừng một chương trình đang chạy, hãy sử dụng Ctrl+ Cđể kết thúc quá trình.

Để xử lý nó theo chương trình trong python, hãy nhập sysmô-đun và sử dụng sys.exit()ở nơi bạn muốn kết thúc chương trình.

import sys
sys.exit()

17

Để dừng tập lệnh python bằng bàn phím: Ctrl+C

Để dừng nó bằng cách sử dụng mã (Điều này đã hoạt động với tôi trên Python 3):

import os
os._exit(0)

bạn cũng có thể dùng:

import sys
sys.exit()

hoặc là:

exit()

hoặc là:

raise SystemExit

4

Ctrl + Z nên làm điều đó, nếu bạn bị kẹt trong trình bao python. Hãy nhớ rằng các phiên bản của tập lệnh có thể tiếp tục chạy ở chế độ nền, vì vậy trong linux, bạn phải hủy quá trình tương ứng.


điều này rất hữu ích khi chạy (nhiều) quy trình song song và CTRL-C sẽ không giết hết chúng. Sau CTRL-Z, bạn có thể kiểm tra jobshoặc psđể sau đó kill 8923754hoặc bất cứ điều gì jobid / quá trình id bạn cần phải giết
Paul

3

Khi tôi có tập lệnh python chạy trên thiết bị đầu cuối linux, CTRL + \ sẽ hoạt động. (không phải CRTL + C hoặc D)


3

Control+ Dhoạt động đối với tôi trên Windows 10. Ngoài ra, đặt exit()ở cuối cũng hoạt động.


3

exit () sẽ giết Kernel nếu bạn đang ở trong Jupyter Notebook nên không phải là ý kiến ​​hay. raiselệnh sẽ dừng chương trình.


2

bạn cũng có thể sử dụng Activity Monitorđể dừng quá trình py


1

Để dừng chương trình của bạn, chỉ cần nhấn CTRL+D

hoặc exit().


0

Nhấn Ctrl+ Alt+ Deletevà Trình quản lý tác vụ sẽ bật lên. Tìm lệnh Python đang chạy, nhấp chuột phải vào nó và nhấp vào Stop hoặc Kill.


0

Nếu bạn đang làm việc với Spyder, hãy sử dụng CTRL +. (DOT) và bạn sẽ khởi động lại hạt nhân, đồng thời bạn sẽ dừng chương trình.


0

Giải pháp Windows: Control + C.

Giải pháp Macbook: Control (^) + C.

Một cách khác là mở một thiết bị đầu cuối, nhập top, viết ra PIDquy trình mà bạn muốn kết thúc và sau đó nhập vào thiết bị đầu cuối:kill -9 <pid>

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.