Cách tự dừng một tập lệnh Python chạy liên tục trên linux


19

Tôi có một tập lệnh Python đang chạy và liên tục đổ lỗi vào một tệp nhật ký.

Tôi muốn chỉnh sửa tập lệnh và chạy lại tập lệnh nhưng không biết cách dừng tập lệnh.

Tôi hiện đang đăng nhập vào Linux thông qua PuTTy và đang thực hiện tất cả các mã hóa ở đó. Vì vậy, có một lệnh để dừng kịch bản python trong linux?

Câu trả lời:


35

Bạn sẽ phải tìm id quá trình (pid). một lệnh để làm điều này sẽ là

$> ps -ef

để giới hạn kết quả cho các quá trình python, bạn có thể grep kết quả

$> ps -ef | grep python

sẽ cho kết quả như sau:

user      2430     1  0 Jul03 ?        00:00:01 /usr/bin/python -tt /usr/sbin/yum-updatesd

cột thứ hai là pid. sau đó sử dụng lệnh kill như vậy:

$> kill -9 2430 (i.e. the pid returned)

Đó chính xác là những gì tôi đang tìm kiếm. Cảm ơn bạn

7

Tìm id tiến trình (PID) của tập lệnh và đưa ra lệnh kill -9 PIDhủy quy trình trừ khi nó chạy dưới dạng tiến trình nền tảng của bạn tại thiết bị đầu cuối trong trường hợp bạn có thể Contrl-C để giết nó.

Tìm PID bằng lệnh này:

ps -elf | grep python

Nó liệt kê tất cả các quá trình python, chọn ra đúng và lưu ý PID của nó. Sau đó

kill -9 <whatever_the_PID_is>

sẽ giết quá trình. Bạn có thể nhận được một thông báo về việc đã chấm dứt một quá trình ở giai đoạn này.

Ngoài ra, bạn có thể sử dụng toplệnh để tìm quá trình python. Đơn giản chỉ cần nhập k(để giết) và topchương trình sẽ nhắc bạn về quy trình PID để giết. Đôi khi thật khó để thấy tất cả các quy trình bạn quan tâm topvì chúng có thể cuộn ra khỏi màn hình, tôi nghĩ rằngps cách tiếp cận dễ dàng hơn / tốt hơn.


4
Chà, trước khi sử dụng -9, tôi sẽ giết nó "nhẹ nhàng" trước. Chỉ khi nó không phản ứng, tôi sẽ sử dụng -9.
glglgl

Không quen thuộc với thuật ngữ "giết chết mềm" ..
Levon

7

Hãy thử dòng đơn giản này, Nó sẽ chấm dứt tất cả script.py:

pkill -9 -f script.py

1
Điều này tốt hơn nhiều so với tìm kiếm thủ công cho PID nếu tên tập lệnh là duy nhất.
FlippingBinary

4

Nếu chương trình là quy trình hiện tại trong trình bao của bạn, gõ Ctrl-C sẽ dừng chương trình Python.


Giải pháp tuyệt vời, cần điều này để thử nghiệm.
Kuzon

1

Trong một thế giới hoàn hảo, bạn sẽ đọc tài liệu cho kịch bản và xem (các) tín hiệu nào sẽ được sử dụng để bảo nó kết thúc. Trong cuộc sống thực, trước tiên, bạn có thể muốn gửi tín hiệu TATE, trước tiên, có thể sử dụng tín hiệu KILL nếu nó bỏ qua TATE. Vì vậy, những gì bạn làm là tìm ID tiến trình, sử dụng lệnh ps (như ai đó đã mô tả). Sau đó, bạn có thể chạy kill -TERM <pid>. Một số chương trình sẽ dọn sạch mọi thứ, như các tệp mà chúng có thể đã mở, khi chúng nhận được tín hiệu như vậy, vì vậy sẽ tốt hơn khi bắt đầu với một cái gì đó như thế. Nếu thất bại, thì sẽ không còn nhiều việc phải làm ngoại trừ cái búa lớn : kill -KILL <pid>. (bạn có thể sử dụng các giá trị số, ví dụ -KILL = -9 và chúng có thể sẽ không bao giờ thay đổi, nhưng theo nghĩa lý thuyết, có thể an toàn hơn khi sử dụng tên)


0

Nếu bạn biết tên của tập lệnh, bạn có thể giảm tất cả công việc thành một lệnh duy nhất:

ps -ef | grep "script_name" | awk '{print $2}' | xargs sudo kill

Nếu bạn muốn chắc chắn rằng đó là một kịch bản python:

ps -ef | grep "python script_name" | awk '{print $2}' | xargs sudo kill

Nếu bạn muốn giết tất cả các tập lệnh python:

ps -ef | grep "python" | awk '{print $2}' | xargs sudo kill

Tôi cho rằng bạn có ý tưởng;)

Nhắc nhở: bạn cần trích dẫn "" tên tập lệnh như trong ví dụ.

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.