วิธีฆ่ากระบวนการไม่ตอบสนองเพื่อฆ่า -9


9

ฉันเห็นกระบวนการต่างๆใน SGI Altix 450 ที่รัน SLES 10.1 ดูเหมือนว่าหยุดการทำงาน (เช่นไม่มีการแสดงผลเพิ่มเติมในบันทึกของตนเป็นเวลาหลายชั่วโมง) ณ จุดนี้ฉันต้องการที่จะฆ่ากระบวนการที่กระทำผิดเพื่อให้ฉันสามารถเริ่มต้นใหม่ได้ ด้านบนแสดงว่ากระบวนการอยู่ในสถานะ (R) แม้ว่าเมื่อฉันพยายามที่จะฆ่ามันไม่มีอะไรเกิดขึ้น แม้เมื่อฉันใช้ kill -9 มันยังคงสะท้อนอยู่ ในกรณีนี้ฉันจะต้องทำอะไรนอกจากรีสตาร์ทเครื่อง?


2
พวกเขาเป็นรหัสกระบวนการเดียวกันหรือไม่? ไม่ใช่ว่าคุณกำลังฆ่ากระบวนการและดีมอนบางคนกำลังเปิดใช้งานกระบวนการที่มีชื่อเดียวกันหรือไม่
CK

คำตอบ:


9

เป็นไปได้ว่ากระบวนการถูกฆ่า แต่รอให้ผู้ปกครองรวบรวมค่าส่งคืน ในกรณีนั้นหลังจากถูกฆ่ามันจะอยู่ในสถานะ 'Z' และไม่ใช่ 'R' ในกรณีนี้คุณควรค้นหาppidกระบวนการโดยใช้psคำสั่งและฆ่ากระบวนการหลักด้วย (หากคุณแน่ใจจริงๆว่าจะไม่ทำให้เกิดปัญหาใด ๆ )

อีกกรณีหนึ่งอาจเป็นเช่นนั้นได้ด้วยเหตุผลบางอย่างที่กระบวนการรีสตาร์ทหลังจากถูกฆ่าอย่าง tty ในกรณีนั้น id กระบวนการควรเปลี่ยนทุกครั้งที่คุณฆ่า -9 ดูว่า ID กระบวนการมีการเปลี่ยนแปลงทุกครั้งที่คุณพยายามฆ่าหรือไม่


ฉันเชื่อว่าฉันพยายามจะฆ่ากระบวนการผู้ปกครอง เป็นกระบวนการหลักที่อยู่ในสถานะ (R) pstree ยืนยันสิ่งนี้ กระบวนการลูกทั้งหมดอยู่ในสถานะ zombie (Z) ppid คงที่ดังนั้นฉันไม่เชื่อว่ามันเป็นเพียงการเริ่มต้นใหม่
Jared Brown

หากคุณฆ่าโพรเซสแม่ (และโพรเซสของโพรเซสเป็นต้น) init จะกลายเป็นพาเรนต์ของโพรเซสลูกที่อยู่ในสถานะ 'Z' และเก็บค่าส่งคืน ดังนั้นวิธีที่ดีที่สุดในการลบ 'Z' childs ที่พาเรนต์ไม่ได้รับค่าส่งคืนคือการฆ่า parent เช่นกันเพื่อให้ init กลายเป็น parent ของกระบวนการลูกที่ตายแล้ว
Saurabh Barjatiya

นี่คือปัญหาที่ฉันมี การส่งสัญญาณ -9 ผ่าน kill ไปที่กระบวนการพาเรนต์ไม่ได้ยุติลง
Jared Brown

1
การส่ง SIGHUP ไปยังผู้ปกครองบางครั้งก็เพียงพอแล้ว คุณไม่จำเป็นต้องฆ่าผู้ปกครองเสมอไป
โทมัส

2
ฉันขอโทษ SIGCHLD (เร็วเกินไปในตอนเช้า)
Thomas

2

กระบวนการกำลังรอทรัพยากรระบบบางอย่างหรืออาจเป็น NFS ที่ไม่อนุญาตให้ 'ปล่อย' ชอบที่จะได้ยินคำตอบสำหรับเรื่องนี้นอกเหนือจากของฉัน ...

รีบูทกล่องหรือให้กระบวนการนั่งรอ

ฉันสงสัยว่าคุณอาจจะสามารถ 'หยุด' กระบวนการผ่านทางฆ่า -STOP {PID} เพื่อป้องกันไม่ให้ใช้ซีพียูมากขึ้น

การเริ่มต้นใหม่ควรเป็นไปได้แม้ว่าจะมีกระบวนการหยุดทำงานอื่นอยู่ แต่อาจต้องใช้พอร์ตรายการหรือส่วนหน่วยความจำที่แชร์ซึ่งยังคงใช้งานอยู่โดยกระบวนการอื่น


1
กระบวนการที่กำลังรอ NFS หรือฟังก์ชั่น I / O บางอย่างที่จะเสร็จสิ้นจะอยู่ในสถานะ (D) หรือไม่ กระบวนการเหล่านี้อยู่ในสถานะ (R)
Jared Brown

นี่คือสิ่งที่เกิดขึ้นกับฉันในบางครั้งเมื่อฉันทำlsคำสั่งบนเมาท์ s3fs lsกระบวนการจะไม่ฆ่าแม้จะมีkill -9จนกว่าฉันจะบังคับให้ยกเลิกการต่อเชื่อมกับumount -l
มาร์โก Marsala

0

คุณตรวจสอบ dmesg หรือยัง ฉันเห็นสิ่งนี้หลังจากเคอร์เนลตกใจ วิธีเดียวในการกู้คืนคือการรีบู๊ต (โดยเฉพาะอย่างยิ่งในไม่ช้า) - จากนั้นรับเคอร์เนลที่ได้รับการติดตั้งแล้ว

กระบวนการที่ไม่สามารถฆ่าได้ปกติจะอยู่ในสถานะ D ไม่ใช่ R


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