ฆ่ากระบวนการที่เริ่มต้นใหม่อย่างต่อเนื่อง


16

เกิดอะไรขึ้นถ้า 'kill -9' ไม่ทำงาน? หรือวิธีการฆ่าสคริปต์ที่เริ่มกระบวนการใหม่ ไม่ได้ช่วยฉันด้วยซ้ำ

ฉันมีสคริปต์หลามซึ่งเริ่มต้นโดยอัตโนมัติที่มี ID กระบวนการอื่นใช้พอร์ตเดียวกันเมื่อถูกฆ่าตายsudo kill -9 <pid>โดยใช้

$ lsof -i :3002
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python  13242 ubuntu    3u  IPv4  64592      0t0  TCP localhost:3002 (LISTEN)
$ sudo kill -9 13242
$ lsof -i :3002
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python  16106 ubuntu    3u  IPv4  74792      0t0  TCP localhost:3002 (LISTEN)
$ sudo kill 16106
$ lsof -i :3002
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python  16294 ubuntu    3u  IPv4  75677      0t0  TCP localhost:3002 (LISTEN)

มันไม่ใช่กระบวนการซอมบี้

$ ps -Al

4 S     0 16289     1  0  80   0 - 12901 poll_s ?        00:00:00 sudo
4 S  1000 16293 16289  0  80   0 -  1100 wait   ?        00:00:00 sh
0 S  1000 16294 16293  0  80   0 - 34632 poll_s ?        00:00:00 python

ฉันได้ลองsudo pkill -f <processname>โดยไม่มีโชค มันไม่อยากตาย

ปรับปรุง:

มันเป็นกระบวนการหลักshที่มีผู้ปกครองsudoดังกล่าวในตารางข้างต้น ฉันไม่แน่ใจว่าปลอดภัยที่จะฆ่าคนเหล่านี้ทันทีหรือไม่ นอกจากนี้ยังเป็นเซิร์ฟเวอร์ ubuntu ที่ใช้ร่วมกัน


ดูเหมือนว่ามันใกล้จะตายแล้ว lsofเอาต์พุตของคุณจะแสดง pid ใหม่ทุกครั้ง กระบวนการนี้เพิ่งเริ่มต้นใหม่
Patrick

ใช่มันไม่ต้องการตายตลอดไป ตื่นขึ้นเหมือนอย่างที่ไม่เคยตาย :(
ลักษมีมณีนาค Guptha

คำตอบ:


26

เริ่มต้นโดยอัตโนมัติด้วยID กระบวนการอื่นหมายความว่าเป็นกระบวนการที่แตกต่าง ดังนั้นจึงมีกระบวนการผู้ปกครองซึ่งตรวจสอบลูก ๆ ของมันและหากมีใครตายก็จะได้รับการเกิดใหม่โดยผู้ปกครอง หากคุณต้องการหยุดบริการอย่างสมบูรณ์ค้นหาวิธีหยุดกระบวนการหลัก การฆ่าด้วยSIGKILLแน่นอนว่าเป็นหนึ่งในตัวเลือก แต่อาจไม่ใช่ The Right One TMเนื่องจากเซอร์วิสมอนิเตอร์อาจต้องทำการล้างข้อมูลบางอย่างเพื่อปิดเครื่องอย่างถูกต้อง

ในการค้นหากระบวนการตรวจสอบคุณอาจต้องตรวจสอบรายการกระบวนการทั้งหมดเนื่องจากผู้ฟังที่แท้จริงอาจแยกตัวออกจากผู้ปกครองของพวกเขา (โดยทั่วไปคือfork() + setsid()คอมโบ) ในกรณีนี้ฉันค้นหาผลลัพธ์ของps faux(จากprocpsอย่างน้อยอาจแตกต่างกันไปสำหรับการใช้งานอื่น ๆ ) ค่อนข้างมีประโยชน์ - มันแสดงรายการกระบวนการทั้งหมดในลำดับชั้นต้นไม้ ถ้าไม่มีแผ่นปิดPID (ดูวิกิพีเดียด้วย ) หน้าจอ PID ควรเล็กกว่า PID ของผู้ฟังใด ๆ


พาเรนต์ของมันshคือพาเรนsudoต์ การฆ่าพวกเขามันโอเคไหม?
Lakshminarayanan Guptha

ผู้ปกครองของกระบวนการใด คนฟังพอร์ต 3002? ในกรณีนั้นแสดงรายการกระบวนการทั้งหมดและเดาว่าอันไหนคือจอภาพ ด้วย linux procpsฉันมักจะพบว่าผลลัพธ์ของps -fauxข้อมูลนั้นเพียงพอ นอกจากนี้โปรดทราบว่า PID ของจอภาพควรเล็กกว่า PID ของผู้ฟังที่แท้จริง (ยกเว้นกรณีที่คุณมีระบบในบางครั้งและ PID ถูกห่อไว้แล้วตั้งแต่เริ่มให้บริการ)
เตอร์

ยิ่งใหญ่ ps -fauxช่วยในการเริ่มฆ่าจากผู้ปกครอง คุณช่วยอัพเดทคำตอบของคุณด้วยคำตอบจากความคิดเห็นได้ไหม?
Lakshminarayanan Guptha

ใช่ฉันกำลังคิดเกี่ยวกับมัน ... :)
เตอร์

ps fauxช่วยในการตรวจสอบsupervisordที่เริ่มต้นอย่างไม่มีที่สิ้นสุดแขวนคอ daemon Laravel คิว
antongorodezkiy

4

หากคุณรู้จักพอร์ตการรับฟังของกระบวนการคุณสามารถใช้fuserกับการ-kตั้งค่าสถานะ

สิ่งที่ต้องการ,

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