ทำไมฉันไม่ควรใช้ 'kill -9' / SIGKILL


14

การโพสต์คำถามนี้เพราะฉันรู้สึกประหลาดใจที่ไม่พบคำตอบโดยตรง ขอโทษถ้านี่เป็นสิ่งที่ซ้ำ - ฉันดู!

ฉันเคยได้ยินสิ่งนั้นkill -9หรือkill -SIGKILLไม่ดี แต่ฉันไม่เข้าใจว่าทำไม ถ้าฉันไม่ควรkill -9สิ่งที่ควรฉันทำเพื่อฆ่ากระบวนการหรือไม่?


2
หลักฐานของคำถามนั้นผิด SIGKILL เป็นเพียงเครื่องมือ ขอแนะนำในบางสถานการณ์และไม่แนะนำในสถานการณ์อื่น ๆ (เช่นเดียวกับเครื่องมืออื่น ๆ ทั้งหมด)
kubanczyk

@kancanczyk แน่ใจ แต่มันเป็นเครื่องมือที่ใช้ผิด ๆ และใช้โดยที่ไม่เข้าใจว่ามันมีจุดประสงค์ ฉันได้เห็นหัวข้อมากมายที่ A บอกว่า " Just kill -9it ", OP บอกว่า " เยี่ยมมากใช้งานได้! ฉันจำได้ว่าหลังจากนี้! " และ B เข้ามาเพื่อเตือนว่า " เดี๋ยวก่อนkill -9อันตราย! " หลังจากความจริงแล้ว
dimo414

คำตอบ:


15

SIGKILLดึงพรมออกจากกระบวนการทำงานของคุณและยกเลิกมันทันที สำหรับโปรแกรมที่ง่ายมากนี่เป็นเรื่องปกติ ในทางปฏิบัติมีโปรแกรม "ง่าย ๆ " น้อยมาก

ภายใต้หน้าปกแม้แต่โปรแกรมที่ดูเล็กน้อยก็ทำงานธุรกรรมทุกประเภทที่พวกเขาต้องทำความสะอาดก่อนที่จะยุติ (คิดว่าfinallyบล็อกในภาษาจาวาและภาษาโปรแกรมอื่น ๆ ) เช่นการปิดตัวจัดการทรัพยากรการลบไฟล์ชั่วคราวและการล้างข้อมูลจาก หน่วยความจำไปยังดิสก์ คุณไม่สามารถคาดการณ์ได้เมื่อโปรแกรมอาจทำสิ่งนี้

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

คุณไม่จำเป็นต้องส่งSIGKILLและคุณควรแน่ใจว่าได้ใช้ทางเลือกของคุณก่อนที่จะทำเช่นนั้น ในหลายกรณีการรีบูตเครื่อง (ซึ่งในที่สุดจะส่งSIGKILLของให้กับโปรแกรมการทำงานไม่) ปลอดภัยกว่าด้วยตนเองส่งSIGKILLตัวเอง ฉันสามารถนับจำนวนครั้งที่ฉันต้องส่งSIGKILL(และน่าจะเป็นของฉันเอง)

โดยทั่วไปคุณสามารถใช้Ctrl+ C(ซึ่งจะส่งกระบวนการพื้นหน้า a SIGINT) หรือSIGTERM(ใน "ยุติ") เพื่อสั่งให้กระบวนการหยุดสิ่งที่ทำและออก

อ่านเพิ่มเติมบางส่วน:

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