วิธีหยุดสคริปต์ Python ที่ทำงานอย่างต่อเนื่องบน linux ด้วยตนเอง


19

ฉันมีสคริปต์ Python ที่กำลังทำงานอยู่และทิ้งข้อผิดพลาดลงในไฟล์บันทึกอย่างต่อเนื่อง

ฉันต้องการแก้ไขสคริปต์และเรียกใช้อีกครั้ง แต่ไม่ทราบวิธีหยุดสคริปต์

ขณะนี้ฉันเข้าสู่ระบบบน Linux ผ่าน PuTTy และฉันกำลังทำการเข้ารหัสทั้งหมดที่นั่น ดังนั้นมีคำสั่งให้หยุดสคริปต์ python ใน linux หรือไม่

คำตอบ:


35

คุณจะต้องค้นหารหัสกระบวนการ (pid) คำสั่งเดียวในการทำเช่นนี้ก็คือ

$> ps -ef

เพื่อ จำกัด ผลลัพธ์การประมวลผลแบบหลามคุณสามารถ grep ผลลัพธ์ได้

$> ps -ef | grep python

ซึ่งจะให้ผลลัพธ์เช่น:

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

คอลัมน์ที่สองคือ pid จากนั้นใช้คำสั่ง kill เช่นนี้:

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

นั่นคือสิ่งที่ฉันกำลังมองหา ขอบคุณ

8

ลองบรรทัดง่ายๆนี้มันจะยุติทั้งหมดscript.py:

pkill -9 -f script.py

1
นี่จะดีกว่าการค้นหา PID ด้วยตนเองถ้าชื่อสคริปต์ไม่ซ้ำกัน
FlippingBinary

7

ค้นหา id กระบวนการ (PID) ของสคริปต์และออก a kill -9 PIDเพื่อฆ่ากระบวนการยกเว้นว่ามันทำงานเป็นกระบวนการ forground ของคุณที่เทอร์มินัลซึ่งในกรณีนี้คุณสามารถ Contrl-C เพื่อฆ่ามัน

ค้นหา PID ด้วยคำสั่งนี้:

ps -elf | grep python

มันแสดงรายการกระบวนการหลามทั้งหมดเลือกหนึ่งอันที่ถูกต้องแล้วจดบันทึก PID ของมัน แล้วก็

kill -9 <whatever_the_PID_is>

จะฆ่ากระบวนการ คุณอาจได้รับข้อความเกี่ยวกับการยกเลิกกระบวนการในขั้นตอนนี้

หรือคุณสามารถใช้topคำสั่งเพื่อค้นหากระบวนการของหลาม เพียงป้อนk(สำหรับการฆ่า) และtopโปรแกรมจะแจ้งให้คุณทราบถึง PID ของกระบวนการในการฆ่า บางครั้งมันยากที่จะเห็นกระบวนการทั้งหมดที่คุณสนใจtopเนื่องจากอาจเลื่อนหน้าจอออกฉันคิดว่าpsวิธีการนั้นง่ายกว่า / ดีกว่า


4
ก่อนที่จะใช้-9ฉันจะฆ่ามัน "เบา ๆ " ก่อน -9แต่ถ้ามันไม่ตอบสนองผมจะใช้
glglgl

ไม่คุ้นเคยกับคำว่า "soft kill" ..
Levon

4

หากโปรแกรมเป็นกระบวนการปัจจุบันในเชลล์ของคุณการพิมพ์ Ctrl-C จะหยุดโปรแกรม Python


ทางออกที่ดีต้องการสิ่งนี้สำหรับการทดสอบ
Kuzon

1

ในโลกที่สมบูรณ์แบบคุณจะอ่านเอกสารสำหรับสคริปต์และดูว่าควรใช้สัญญาณใดเพื่อบอกให้จบ ในชีวิตจริงคุณอาจต้องการส่งสัญญาณ TERM ก่อนอื่นอาจใช้สัญญาณ KILL หากไม่สนใจ TERM ดังนั้นสิ่งที่คุณทำคือค้นหา Process ID โดยใช้คำสั่ง ps (ตามที่มีคนอธิบายไว้แล้ว) kill -TERM <pid>จากนั้นคุณสามารถเรียกใช้ บางโปรแกรมจะล้างสิ่งต่าง ๆ เช่นไฟล์ที่อาจเปิดเมื่อพวกเขาได้รับสัญญาณแบบนั้นดังนั้นจึงดีกว่าที่จะเริ่มต้นด้วยบางสิ่งเช่นนั้น kill -KILL <pid>ถ้าไม่แล้วมีไม่ได้ใส่มากจะทำอย่างไรยกเว้นค้อนขนาดใหญ่: (คุณสามารถใช้ค่าตัวเลขเช่น -KILL = -9 และพวกเขาอาจจะไม่เปลี่ยนแปลง แต่ในทางทฤษฎีแล้วมันอาจจะปลอดภัยกว่าถ้าใช้ชื่อ)


0

หากคุณรู้ชื่อของสคริปต์คุณสามารถลดงานทั้งหมดเป็นคำสั่งเดียว:

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

หากคุณต้องการตรวจสอบให้แน่ใจว่าเป็นสคริปต์หลาม:

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

หากคุณต้องการฆ่าสคริปต์หลามทั้งหมด:

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

ฉันคิดว่าคุณได้รับความคิด;)

เตือนความจำ: คุณต้องอ้างชื่อสคริปต์ตามที่แสดงในตัวอย่าง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.