มีความแตกต่างระหว่าง
kill -9 212121
และ
kill 212121
มีความแตกต่างระหว่าง
kill -9 212121
และ
kill 212121
คำตอบ:
หน้า man ของ Ubuntu สำหรับkill
อธิบายถึงวัตถุประสงค์ของ-9
สวิตช์ (เป็นที่ยอมรับในลักษณะที่เปลี่ยนแปลงเร็ว):
Name Num Action Description
KILL 9 exit cannot be blocked
นี่คือสิ่งที่หน้าคนอื่นพูดว่า
คำสั่ง
kill
ส่งสัญญาณที่ระบุไปยังกระบวนการหรือกลุ่มกระบวนการที่ระบุ หากไม่มีการระบุTERM
สัญญาณสัญญาณจะถูกส่งTERM
สัญญาณจะฆ่ากระบวนการที่ไม่จับสัญญาณการซื้อขาย สำหรับกระบวนการอื่น ๆ อาจจำเป็นต้องใช้สัญญาณKILL
(9
) เนื่องจากไม่สามารถจับสัญญาณนี้ได้
ดังนั้นการใช้-9
สวิตช์ทำให้มั่นใจได้ว่ากระบวนการจะถูกฆ่าอย่างมีประสิทธิภาพ แม้ว่ากระบวนการแช่แข็งหรือไม่ตอบสนองอาจไม่ตอบสนองต่อTERM
สัญญาณง่าย ๆแต่ก็จะตายเมื่อส่งKILL
สัญญาณ
ฆ่าคำสั่งจะส่งกำหนดสัญญาณไปยังกระบวนการที่มีความเป็นเอกลักษณ์ที่กำหนด (PID) A:
kill -<signal> <pid>
แน่นอนว่าเราสามารถฆ่ากระบวนการที่เราเป็นเจ้าของได้เท่านั้นในขณะที่รูทสามารถฆ่ากระบวนการทั้งหมดได้ ดูวิกิพีเดียสำหรับการสรุปที่ดีของสัญญาณการคำนวณ
สัญญาณkill
สามารถส่งมีการระบุไว้ในmanpage สัญญาณสามารถแสดงโดยชื่อหรือตามจำนวน หากไม่มีสัญญาณจะได้รับสัญญาณเริ่มต้น 15 ปี TERM
ถูกนำมาใช้.
คำสั่งทั้งสามด้านล่างนี้เหมือนกัน:
kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234
ความแตกต่างระหว่างSIGTERM
และSIGKILL
เป็นวิธีที่แอปพลิเคชันอาจทำงานกับสัญญาณ:
TERM
: แอปพลิเคชันจะสามารถยกเลิกได้เช่นเรียกใช้รูทีนการปิดอย่างถูกต้อง KILL
: แอปพลิเคชันจะหยุดและฆ่าทันที (ซึ่งอาจนำไปสู่การสูญเสียข้อมูลหรือเพิ่ม apport เพื่อรายงานความผิดพลาดที่สันนิษฐานในบางกรณี)โปรดทราบว่าทั้งหมดต่อไปนี้มีความหมายเหมือนกัน:
kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234
เป็นมูลค่าชี้ให้เห็นว่าในโลกของการจัดการสัญญาณSIGKILLเป็นหนึ่งในไม่กี่คนที่ไม่ซ้ำกันที่ได้รับการจัดการโดยระบบปฏิบัติการไม่ใช่โปรแกรม เมื่อคุณเรียกใช้kill -9
คุณไม่ได้บอกให้แอปพลิเคชั่นหยุดการทำงาน แต่คุณบอกให้ระบบปฏิบัติการหยุดการทำงานไม่ว่าโปรแกรมจะทำงานอย่างไร
หลังจากส่งSIGKILLแล้วโปรแกรมจะหยุดทำงานทันที หากการเรียกเคอร์เนลใด ๆ กำลังทำงาน (เช่นไฟล์ IO) ในนามของโปรแกรมการเรียกเหล่านั้นอาจหรืออาจไม่ดำเนินการต่อจนกว่าจะเสร็จสิ้นขึ้นอยู่กับการโทร แต่ตัวโปรแกรมเองจะไม่ทำงานอีกต่อไป โปรดทราบว่างานที่ติดตามหรืองานที่ทำงานภายใต้ดีบักเกอร์อาจทำงานแตกต่างกันที่นี่
สัญญาณอื่นที่ไม่สามารถบล็อกได้คือSIGSTOPซึ่งมีผลคล้ายกัน แต่จะหยุดโปรแกรมแทน คุณสามารถส่งSIGCONT ในภายหลังเพื่อดำเนินการต่อ พฤติกรรมนี้ควบคุมโดยระบบปฏิบัติการอย่างสมบูรณ์และโปรแกรมไม่ได้รับการแจ้งเตือนล่วงหน้า
สัญญาณอื่น ๆ ทั้งหมดจะถูกส่งไปยังโปรแกรม มันสามารถจัดการกับมันอย่างไรก็ตามมันเลือกหรือถ้ามันไม่สนใจสัญญาณแล้วพฤติกรรมเริ่มต้นจะตามมา
ต่อไปนี้เป็นสัญญาณที่มีประโยชน์บางประการที่คุณอาจพบว่าตัวคุณส่งไปยังกระบวนการ:
kill
มักจะยุติโปรแกรม ... บางครั้งหลังจากที่โปรแกรมเสร็จสิ้นสิ่งที่มันทำkillall
cat /etc/passwd | head -n1
จะส่ง SIGPIPE ไปยังcat
กระบวนการหลังจากพิมพ์บรรทัดแรกทำให้เกิดcat
การยกเลิกก่อนจบไฟล์ทั้งหมดในขณะที่สัญญาณทั้งหมดเหล่านี้เกิดขึ้น "ตามธรรมชาติ" ในการตั้งค่าของตนเองคุณสามารถใช้สัญญาณเพื่อปลอมเงื่อนไขเพื่อให้ได้ผลลัพธ์ตามที่ต้องการ
ตัวอย่างเช่นหากคุณต้องการยุติเซสชัน SSH ของใครสักคนคุณสามารถฆ่ากระบวนการ แต่โดยทำเช่นนั้นคุณจะป้องกันไม่ให้อัปเดตไฟล์ประวัติซึ่งอาจมีความสำคัญต่อเหตุผลด้านความปลอดภัย แต่ถ้าคุณส่งSIGHUPแทนกระบวนการจะถือว่าการเชื่อมต่อนั้นใช้งานไม่ได้และจะทำการล้างข้อมูลมาตรฐาน
SIGQUIT
โดยที่การกระทำเริ่มต้นคือการถ่ายโอนข้อมูลหลักและยุติ สามารถใช้งานได้หากโปรแกรมกำลังทำสิ่งผิดปกติอย่างมากคุณต้องหยุดทันทีและต้องการที่จะสามารถดีบักได้ในภายหลัง
kill -9ความหมาย: กระบวนการจะถูกฆ่าโดยเคอร์เนล สัญญาณนี้ไม่สามารถละเว้นได้ 9 หมายถึงสัญญาณ KILL ที่ไม่สามารถดักจับได้หรือเพิกเฉย
การใช้ประโยชน์: SIGKILL singal
Kill Meaning: คำสั่ง kill โดยไม่มีสัญญาณใด ๆ ส่งผ่านสัญญาณ 15 ซึ่งจะยุติกระบวนการด้วยวิธีปกติ
ใช้: สัญญาณSIGTERMซึ่งสามารถจัดการได้โดยโปรแกรมเมอร์
kill -9