ความแตกต่างระหว่าง kill, pkill และ killall คืออะไร


31

ผมคุ้นเคยกับkillคำสั่งและส่วนใหญ่ของเวลาที่เราเพียงแค่ใช้ฆ่า -9 จะฆ่ากระบวนการที่เข้มแข็งมีสัญญาณอื่น ๆ killอีกมากมายที่สามารถนำมาใช้กับ แต่ฉันสงสัยว่าอะไรคือกรณีการใช้งานpkillและkillallหากมีคำสั่ง kill อยู่แล้ว

ทำpkillและkillallใช้killคำสั่งในการนำไปปฏิบัติหรือไม่? ฉันหมายความว่าพวกเขาเป็นเพียงแค่ห่อหุ้มkillหรือพวกเขามีการใช้งานของตัวเอง?

ฉันต้องการทราบว่าpgrepคำสั่งรับรหัสกระบวนการจากชื่อกระบวนการ

คำสั่งทั้งหมดเหล่านี้ใช้การเรียกระบบพื้นฐานเดียวกันหรือไม่? มีมุมมองที่แตกต่างจากประสิทธิภาพการทำงานใดบ้างเร็วกว่ากัน?


2
สองสิ่ง: เหตุใดจึงใช้เป็นkill -9ค่าเริ่มต้น -15 (โปรดหยุด) และ -1 (โมเด็มได้วางสายกรุณาปิดตัวเองให้สะอาด) มีความสุภาพมากกว่านี้ ในประการที่สอง ระวังการใช้ killall บนกล่องที่ไม่ใช่ linux มันอาจทำงานแตกต่างกัน (เช่นใน solaris มันฆ่าทั้งหมดไม่ได้กรองชื่อกระบวนการ)
Hennes

คำตอบ:


31

killคำสั่งเป็นเสื้อคลุมง่ายมากที่จะkill เรียกระบบที่เท่านั้นที่รู้เกี่ยวกับรหัสกระบวนการ (PIDs) pkillและkillallยังห่อหุ้มการkill เรียกของระบบ (จริง ๆ แล้วไปยังไลบรารี libc ซึ่งเรียกใช้การเรียกใช้ระบบโดยตรง) แต่สามารถกำหนด PID ให้คุณได้โดยขึ้นอยู่กับชื่อกระบวนการชื่อเจ้าของกระบวนการเซสชัน id ฯลฯ

วิธีการpkillและการkillallทำงานสามารถมองเห็นได้โดยใช้ltraceหรือstraceกับพวกเขา บน Linux ทั้งคู่อ่านผ่าน/procระบบไฟล์และพบ pid (ไดเรกทอรี) แต่ละอันเพื่อสำรวจเส้นทางในวิธีการระบุกระบวนการด้วยชื่อหรือคุณสมบัติอื่น ๆ วิธีการทำสิ่งนี้คือเทคนิคการพูดเคอร์เนลและระบบเฉพาะ โดยทั่วไปแล้วพวกเขาอ่านจาก/proc/<PID>/statที่มีชื่อคำสั่งเป็นฟิลด์ที่ 2 สำหรับการpkill -fและpgrepตรวจสอบ/cmdlineรายการสำหรับรายการ proc แต่ละ PID ของ

pkillและpgrepใช้การreadprocเรียกของระบบในขณะที่killallไม่ ฉันไม่สามารถบอกได้ว่ามีความแตกต่างด้านประสิทธิภาพหรือไม่: คุณต้องสร้างมาตรฐานด้วยตัวคุณเอง


2

kill และ killall เป็นเครื่องมือที่ให้วิธีการฆ่ากระบวนการ ครั้งแรกโดย PID ของมันที่สองตามชื่อของมัน pgrep (รายการ) และ pkill (ฆ่าโดยค่าเริ่มต้น) เป็นเครื่องมือที่ให้วิธีการส่งข้อความไปยังกระบวนการด้วยชื่อหรือคุณสมบัติอื่น ๆ ดู: http://linux.die.net/man/1/pkill สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ สัญญาณ: http://linux.die.net/man/7/signal


คุณหมายถึงkillallใช้เพื่อฆ่ากระบวนการด้วยชื่อหรือไม่? และมันใช้ pgrep เพื่อจุดประสงค์นี้? และkillallยังฆ่ากระบวนการลูกทั้งหมดด้วย? สัญญาณkillallเริ่มต้นที่ใช้คืออะไร
Ijaz Ahmad Khan

3
... เว้นแต่ว่าคุณอยู่บน Solaris ซึ่งในกรณีนี้killallจะฆ่าโพรเซสทั้งหมดที่คุณมีสิทธิ์ฆ่าดังนั้นถ้าคุณรูทคุณจะรีบูตเซิร์ฟเวอร์ได้อย่างมีประสิทธิภาพ
เจนนี่ D

1
อ๋อ: killall chromiumจะฆ่ากระบวนการโครเมียมpgrep chromiumจะให้รายการ PID คุณpkill chromiumจะฆ่าโครเมียม killall จะส่งสัญญาณ SIGTERM ตามค่าเริ่มต้น (เป็น pkill)
dervishe
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.