วัตถุประสงค์ของตัวเลือก -9 ในคำสั่ง kill คืออะไร?


คำตอบ:


28

หน้า man ของ Ubuntu สำหรับkillอธิบายถึงวัตถุประสงค์ของ-9สวิตช์ (เป็นที่ยอมรับในลักษณะที่เปลี่ยนแปลงเร็ว):

Name     Num   Action    Description
KILL       9   exit      cannot be blocked

นี่คือสิ่งที่หน้าคนอื่นพูดว่า

คำสั่งkillส่งสัญญาณที่ระบุไปยังกระบวนการหรือกลุ่มกระบวนการที่ระบุ หากไม่มีการระบุTERMสัญญาณสัญญาณจะถูกส่ง TERMสัญญาณจะฆ่ากระบวนการที่ไม่จับสัญญาณการซื้อขาย สำหรับกระบวนการอื่น ๆ อาจจำเป็นต้องใช้สัญญาณKILL( 9) เนื่องจากไม่สามารถจับสัญญาณนี้ได้


ดังนั้นการใช้-9สวิตช์ทำให้มั่นใจได้ว่ากระบวนการจะถูกฆ่าอย่างมีประสิทธิภาพ แม้ว่ากระบวนการแช่แข็งหรือไม่ตอบสนองอาจไม่ตอบสนองต่อTERM สัญญาณง่าย ๆแต่ก็จะตายเมื่อส่งKILLสัญญาณ


40

ฆ่าคำสั่งจะส่งกำหนดสัญญาณไปยังกระบวนการที่มีความเป็นเอกลักษณ์ที่กำหนด (PID) A:

kill -<signal> <pid>

แน่นอนว่าเราสามารถฆ่ากระบวนการที่เราเป็นเจ้าของได้เท่านั้นในขณะที่รูทสามารถฆ่ากระบวนการทั้งหมดได้ ดูวิกิพีเดียสำหรับการสรุปที่ดีของสัญญาณการคำนวณ

สัญญาณkillสามารถส่งมีการระบุไว้ในmanpage สัญญาณสามารถแสดงโดยชื่อหรือตามจำนวน หากไม่มีสัญญาณจะได้รับสัญญาณเริ่มต้น 15 ปี TERMถูกนำมาใช้.

คำสั่งทั้งสามด้านล่างนี้เหมือนกัน:

kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234

ความแตกต่างระหว่างSIGTERMและSIGKILLเป็นวิธีที่แอปพลิเคชันอาจทำงานกับสัญญาณ:

  • TERM: แอปพลิเคชันจะสามารถยกเลิกได้เช่นเรียกใช้รูทีนการปิดอย่างถูกต้อง
  • KILL: แอปพลิเคชันจะหยุดและฆ่าทันที (ซึ่งอาจนำไปสู่การสูญเสียข้อมูลหรือเพิ่ม apport เพื่อรายงานความผิดพลาดที่สันนิษฐานในบางกรณี)

16

โปรดทราบว่าทั้งหมดต่อไปนี้มีความหมายเหมือนกัน:

kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234

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

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

สัญญาณอื่นที่ไม่สามารถบล็อกได้คือSIGSTOPซึ่งมีผลคล้ายกัน แต่จะหยุดโปรแกรมแทน คุณสามารถส่งSIGCONT ในภายหลังเพื่อดำเนินการต่อ พฤติกรรมนี้ควบคุมโดยระบบปฏิบัติการอย่างสมบูรณ์และโปรแกรมไม่ได้รับการแจ้งเตือนล่วงหน้า

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

ต่อไปนี้เป็นสัญญาณที่มีประโยชน์บางประการที่คุณอาจพบว่าตัวคุณส่งไปยังกระบวนการ:

  • SIGHUP - hangup
    บอกโปรแกรมที่ผู้ใช้ยกเลิกการเชื่อมต่อ (เช่นเซสชัน SSH หรือหน้าต่างเทอร์มินัลปิด)
    มักจะปิดโปรแกรมอย่างสง่างาม
  • SIGINT - ขัดจังหวะ
    ส่งเมื่อคุณกดCTRL+ C
    โดยปกติหมายถึง "หยุดสิ่งที่คุณกำลังทำ" - อาจหรือไม่อาจฆ่าโปรแกรม
  • SIGTERM - ยุติการ
    เริ่มต้นที่ส่งมาจากและkill มักจะยุติโปรแกรม ... บางครั้งหลังจากที่โปรแกรมเสร็จสิ้นสิ่งที่มันทำkillall
  • SIGSTOP - หยุด
    ส่งเมื่อคุณกดCTRL+ Z
    หยุดโปรแกรมดังกล่าวข้างต้น
  • SIGPIPE - ไปป์ปิด
    บอกโปรแกรมที่ไพพ์ไลน์ปิดแล้ว มักจะยุติโปรแกรม
    ตัวอย่างเช่นcat /etc/passwd | head -n1จะส่ง SIGPIPE ไปยังcatกระบวนการหลังจากพิมพ์บรรทัดแรกทำให้เกิดcatการยกเลิกก่อนจบไฟล์ทั้งหมด

ในขณะที่สัญญาณทั้งหมดเหล่านี้เกิดขึ้น "ตามธรรมชาติ" ในการตั้งค่าของตนเองคุณสามารถใช้สัญญาณเพื่อปลอมเงื่อนไขเพื่อให้ได้ผลลัพธ์ตามที่ต้องการ

ตัวอย่างเช่นหากคุณต้องการยุติเซสชัน SSH ของใครสักคนคุณสามารถฆ่ากระบวนการ แต่โดยทำเช่นนั้นคุณจะป้องกันไม่ให้อัปเดตไฟล์ประวัติซึ่งอาจมีความสำคัญต่อเหตุผลด้านความปลอดภัย แต่ถ้าคุณส่งSIGHUPแทนกระบวนการจะถือว่าการเชื่อมต่อนั้นใช้งานไม่ได้และจะทำการล้างข้อมูลมาตรฐาน


Ctrl + \ ส่งSIGQUITโดยที่การกระทำเริ่มต้นคือการถ่ายโอนข้อมูลหลักและยุติ สามารถใช้งานได้หากโปรแกรมกำลังทำสิ่งผิดปกติอย่างมากคุณต้องหยุดทันทีและต้องการที่จะสามารถดีบักได้ในภายหลัง
Simon Richter

@SimonRichter โอ้คุณพูดถูก แก้ไขแล้ว.
tylerl

6

kill -9ความหมาย: กระบวนการจะถูกฆ่าโดยเคอร์เนล สัญญาณนี้ไม่สามารถละเว้นได้ 9 หมายถึงสัญญาณ KILL ที่ไม่สามารถดักจับได้หรือเพิกเฉย

การใช้ประโยชน์: SIGKILL singal

Kill Meaning: คำสั่ง kill โดยไม่มีสัญญาณใด ๆ ส่งผ่านสัญญาณ 15 ซึ่งจะยุติกระบวนการด้วยวิธีปกติ

ใช้: สัญญาณSIGTERMซึ่งสามารถจัดการได้โดยโปรแกรมเมอร์

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