kill -9 โปรแกรม แต่ยังคงค้างอยู่


11

ฉันพยายามฆ่างานพื้นหลังทั้งหมดที่ส่งก่อนหน้านี้ภายใต้ KUbuntu โดย

kill -9 $(jobs -p)

แม้ว่าคำสั่งนี้จะให้ข้อความทันทีเช่น

[1] ฆ่า myjob1

[2] ฆ่า myjob2

ฉันยังคงเห็นกระบวนการของพวกเขาค้างอยู่ที่เอาต์พุตของด้านบนและการใช้งาน CPU และหน่วยความจำจะไม่เปลี่ยนแปลงในเอาต์พุตของเวลาทำงานและฟรี

ดังนั้นฉันคิดว่าฉันคงไม่ได้ฆ่าพวกเขาอย่างเหมาะสม ใครช่วยกรุณาอธิบายสิ่งที่เกิดขึ้นกับฉันและฉันจะทำอย่างไร

ฉันพบว่าด้านบนถ้าพิมพ์ k และป้อน PID ฉันสามารถฆ่ากระบวนการทีละคน แตกต่างจากคำสั่ง kill หรือไม่?

ฉันยังพบที่ออนไลน์http://www.ruhr.de/home/smallo/award.htmlเกี่ยวกับการไม่แนะนำ kill -9

ใช้จดหมายฟอร์ม Kill -9 ที่ไร้ประโยชน์

(อ้างสิ่งที่น่ารังเกียจ)

ไม่ไม่ไม่. อย่าใช้ kill -9

มันไม่ได้ให้โอกาสในการทำความสะอาด:

1) ปิดการเชื่อมต่อซ็อกเก็ต

2) ล้างไฟล์ temp

3) แจ้งเด็ก ๆ ว่ากำลังจะจากไป

4) รีเซ็ตคุณสมบัติของเครื่อง

และอื่น ๆ และอื่น ๆ และอื่น ๆ

โดยทั่วไปแล้วส่ง 15 และรอสักครู่หรือสองวินาทีและถ้านั่นไม่ได้ผลให้ส่ง 2 และถ้าไม่ได้ผลให้ส่ง 1 หากไม่ได้โปรดลบไบนารีเพราะโปรแกรมทำงานผิดปกติ!

อย่าใช้ kill -9 อย่านำเครื่องเกี่ยวนวดเข้าด้วยกันเพื่อทำความสะอาดกระถาง

มันเป็นเรื่องจริงเหรอ? "ส่ง 15" หมายความว่าอะไร "ส่ง 2" และ "ส่ง 1" พวกเขาสั่งตัวเองหรือ "kill -15 PID", "kill -2 PID" และ "kill -1 PID" หรือไม่?

ขอบคุณและขอแสดงความนับถือ!


การลบไบนารี่ (ไฟล์เรียกทำงาน) ออกจะไม่ทำให้กระบวนการหยุดชะงัก ระบบไฟล์จะรู้ว่ากระบวนการกำลังใช้ไฟล์นั้นและให้กระบวนการ "ดู" ไฟล์แม้หลังจากคุณลบออก
Jeppe Stig Nielsen

คำตอบ:


9

กระบวนการของคุณอาจจะตาย แต่ก็ยังปรากฏอยู่ในรายการตารางกระบวนการเพราะมันเป็น "กระบวนการผีดิบ" เมื่อกระบวนการลูกถูกยกเลิกและหายไปอย่างสมบูรณ์ (ยกเว้นรายการตารางกระบวนการของมัน) และผู้ปกครองจะไม่สามารถเรียกสถานะการเลิกจ้าง (ผ่านฟังก์ชั่นรอใด ๆ ) มันถูกเรียกว่าซอมบี้ ... ฆ่า (สัญญาณผ่าน) ซอมบี้ ทำงานเพราะมันถูกยกเลิกไปแล้ว สิ่งที่คุณต้องทำคือค้นหาโพรเซสแม่ของมันและฆ่าพวกมันหนึ่ง cleany ดังนั้นอย่าใช้ kill - 9

นี่คือสองขั้นตอนง่ายๆในการฆ่าซอมบี้ ...

  1. หากผู้ปกครองยังมีชีวิตอยู่พยายามฆ่ามัน (หรือ SIGHUP คือทั้งหมดที่คุณต้องการ)
  2. หากหมายเลข 1 ล้มเหลวมีข้อผิดพลาดในเคอร์เนล .... รีบูตคือเพื่อนของคุณและแก้ไขข้อผิดพลาดนั้น: ->

ฉันส่งงานของฉันในบรรทัดคำสั่งและพื้นหลังพ่อแม่ของพวกเขาจะเป็นอย่างไร และฉันจะหาพ่อแม่ของพวกเขาได้อย่างไรถ้ามี?
ทิม

ใช้การ-fตั้งค่าสถานะเพื่อ ps เพื่อดูกระบวนการหลัก
แจ็คเอ็ม

6

ดูman killคำจำกัดความของสัญญาณต่าง ๆ ที่มี แต่ใช่

  • 15 คือSIGTERMและขอให้โปรแกรมออก
  • 2 คือSIGINTและเทียบเท่ากับ Control-C
  • 1 คือSIGHUPและระบุว่าเทอร์มินัลหยุดทำงาน

กระบวนการเหล่านี้แจ้งให้ผู้ใช้ทราบว่า "เสร็จสิ้น" ด้วยกระบวนการแม้ว่าพวกเขาจะระบุเหตุผลที่แตกต่างกันบ้าง SIGTERM อาจตีความได้ว่าเป็น "เสร็จสิ้นภารกิจของการหมุนเวียน แต่จากนั้นออก; อย่าเริ่มต้นใหม่" SIGINT หมายถึง กำลังทำและออกจาก ", SIGHUP หมายถึงไม่มีใครฟังอีกต่อไป (กระบวนการเซิร์ฟเวอร์อาจตอบสนองต่อ SIGHUP อย่างถูกต้องตามกฎหมายโดยหยุดคอนโซลเอาต์พุตและทำงานต่อไป)

  • 9 คือSIGKILLและเป็นสิ่งพิเศษที่เป็นกระบวนการเดียวที่กระบวนการไม่สามารถจับและจัดการภายในได้ มันส่งผลให้เคอร์เนลไม่กลับมาควบคุมกระบวนการทำให้ไม่มีโอกาสทำความสะอาด

ด้านบนถ้าพิมพ์ k และป้อน PID ฉันสามารถฆ่ากระบวนการทีละ ดังนั้นนี่เทียบเท่ากับตัวเลือกบางอย่างสำหรับการฆ่าคำสั่งหรือไม่
ทิม

ใช่ด้านบนเพียงแค่ส่งสัญญาณไปยังกระบวนการเช่นเดียวกับการฆ่าไม่ AFAICT สัญญาณเริ่มต้นที่ใช้สูงสุดคือ 15 (SIGTERM)
puetzk

1

มันไม่ได้หมายถึงการใช้kill -15 PID(หรือหมายเลขอื่น) kill -9 PIDแทน ตัวเลขที่เทียบเท่ากับการที่แตกต่างกันสัญญาณยูนิกซ์


1

หมายถึงพิมพ์ "kill -1" หรือ "kill -15" แทนที่จะพิมพ์ "kill -9" Kill -9 เป็นกระสุนไม่ยอมใครง่ายๆในหัวของกระบวนการทำงานใด ๆ ฆ่ามันในสภาพสกปรกซึ่งอาจทำให้หน่วยความจำรั่ว blah blah

หากคุณพิมพ์ kill -9 แต่ใช้งานไม่ได้ฉันจะต้องตรวจสอบให้แน่ใจว่ากระบวนการไม่ได้เกิดขึ้นใหม่และคุณได้รับอนุญาตให้ฆ่ากระบวนการนั้น


คุณจะมองอย่างไรเพื่อให้แน่ใจว่ากระบวนการไม่ได้เกิดขึ้นใหม่? เนื่องจากฉันเป็นเจ้าของกระบวนการฉันมีสิทธิ์ฆ่ากระบวนการนั้นหรือไม่
ทิม

มันควรจะมีหมายเลขกระบวนการที่แตกต่างกันถ้ามันเป็น ดังนั้นถ้าคุณทำ ps -Al และเห็น processA คุณจะฆ่า -9 processA แล้วทำ ps -Al และยังมี processA ในคิวกระบวนการตรวจสอบให้แน่ใจว่าเป็นกระบวนการเดียวกันและไม่ใช่รายการใหม่
Satanicpuppy

และมันจะบอกคุณว่าคุณไม่มีสิทธิ์ฆ่ากระบวนการ
Satanicpuppy

0

สัญญาณ 9 คือ SIGKILL การส่ง SIGKILL กำลังขอให้ระบบปฏิบัติการฆ่ากระบวนการโดยทันทีไม่มีการถามคำถาม กระบวนการนี้จะไม่ได้รับแจ้งล่วงหน้าและไม่มีโอกาสที่จะทำความสะอาดหลังจากนั้น

สัญญาณ 15 คือ SIGTERM การส่ง SIGTERM กำลังขอให้ระบบปฏิบัติการขอให้กระบวนการปิดตัวเองลง

SIGKILL อาจถูกเพิกเฉยหากระบบปฏิบัติการคิดว่ากระบวนการกำลังทำ IO หรือเป็น Zombie (เป็นกระบวนการย่อยที่ผู้ปกครองไม่ได้ล้างข้อมูลหลังจากนั้น)

แอ็พพลิเคชันอาจถูกละเว้น SIGTERM แต่ไม่แนะนำให้แอปพลิเคชันทำเช่นนี้เนื่องจาก OS ส่ง SIGTERM ในระหว่างการปิดเครื่องตามด้วย SIGKILL ในไม่ช้าหากโปรแกรมยังคงทำงานอยู่

หมายเหตุ: บรรทัดคำสั่งkillจะขอให้ระบบปฏิบัติการส่งสัญญาณไปยังแอปพลิเคชันอยู่เสมอซึ่งอาจหรือไม่ขึ้นอยู่กับว่าใครเป็นเจ้าของกระบวนการ ฯลฯ ...

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