มีวิธีการมากมายที่สามารถใช้เพื่อ kill process ใน Linux บทช่วยสอนนี้จะสอนคุณวิธีหาและ kill process ที่เสียหาย
กระบวนการสามารถกลายเป็น orphaned ได้ง่าย ไม่ว่าจะตั้งใจหรือไม่ กระบวนการพาเรนต์สามารถ crash และทิ้งกระบวนการลูกไว้รันอยู่ บางครั้ง กระบวนการพาเรนต์ล้มเหลวในการเก็บกระบวนการลูกที่เสร็จสิ้น และมันกลายเป็น zombie
ทั้งสองกระบวนการเหล่านี้ค้างอยู่และต้องการการแทรกแซงด้วยตนเอง เข้าสู่ job control มาดูวิธี kill กระบวนการที่เสียหาย
มาดูคำสั่งบางคำสั่ง:
- top (และทำไม htop น่าจะดีกว่า)
- ps
- kill
Top (ค้นหาและทำลาย)
ก่อนที่คุณจะเริ่มส่งข้อความ kill ไปยังกระบวนการทั้งหมด คุณต้องรู้ว่าคุณมีอะไร เราไม่สมมติว่ามีกระบวนการที่เสียหายกำลังรัน และรู้ทุกอย่างว่าต้องมองหาอะไร นั่นคือสิ่งที่เรามี top มาไว้ ให้รัน vim และ pop มันไปพื้นหลัง

vim
โอเค ตอนนี้เรามีกระบวนการที่เราไม่สามารถโต้ตอบได้ปกติ มารัน top เอาต์พุทปกติไม่ช่วยเหลือ ดังนั้นเราจะรันตัวกรอง
- กด shift+l
- พิมพ์ vim
- กด enter

top
นั่นคือเอาต์พุทของเรา คุณจะสังเกตในบรรทัดแรก มันบอกเรา uptime, จำนวนผู้ใช้, และ load averages ของเรา คุณยังจะสังเกตว่ามีข้อมูลสำคัญในคอลัมน์ วันทั่วไปฉันมองที่ S, %CPU, และ TIME+ หากกระบวนการอยู่ในสถานะ Z (zombie) ฉันรู้ว่าต้อง kill มัน หากกระบวนการเกิน 100% CPU มัน overrun และอาจต้อง kill หรือหากกระบวนการรันมาหลายวัน อาจถึงเวลา restart แม้จะอาจเป็น paranoia และไม่จำเป็นในกรณีส่วนใหญ่
วันนี้เรามองที่บรรทัดที่สอง ล่าซอมบี้และค้นหา orphan สำหรับตัวอย่างของเรา เราไม่มีกระบวนการ zombie รันอยู่ ดังนั้นเราจะกรองสำหรับ "2 stopped" processes
- กด o
- พิมพ์: S=T

Filtering top
ตอนนี้เรากรองเหลือเฉพาะกระบวนการใน S=T (state=stopped) filter เราสามารถ kill พวกเขาได้ ขณะอยู่ใน top คุณสามารถกด k ใส่ PID ของกระบวนการ และกด enter หากคุณรันผ่าน คุณจะสังเกตว่าอาจใช้เวลาสักพักในการจบ แทนที่จะเป็นเช่นนั้น กด k อีกครั้ง ใส่ PID, และเปลี่ยนสัญญาณเป็น 9
มันไม่สมบูรณ์ แต่หากคุณมีหน้าต่าง top รันเป็นหน้าต่างสถานะ คุณอยู่ที่นั่นแล้ว คุณยังสามารถส่งสัญญาณ kill แทนสัญญาณ stop ได้
htop
โอเค ฉันจะยอมรับ มันไม่แตกต่างจาก top มากนัก ยกเว้นสี

htop
สีมากมาย
PS
PS, process status ยูทิลิตี้เนทีฟที่น่ารักของเราสำหรับดูข้อมูลกระบวนการบนระบบของเรา เครื่องมือนี้อ่านจากไฟล์ใน /proc วันส่วนใหญ่ คุณจะใช้:

PS
- -a, แสดงกระบวนการสำหรับผู้ใช้ทั้งหมด
- -u, แสดงเจ้าของกระบวนการ
- -x, แสดงกระบวนการที่ไม่ attached กับเทอร์มินัล
การรัน ps -aux เพียงอย่างเดียวจะได้ทุกอย่าง แต่สิ่งนี้มีประโยชน์น้อย มา pipe ไป grep และหา vim ที่หายของเรา

ps-aux command
และนั่นคือมัน! คุณยังจะเห็นคำสั่ง grep ปัจจุบันของคุณอยู่ที่นั่นด้วย หากคุณไม่ต้องการนั่น เปลี่ยน grep ของคุณเล็กน้อย

ps-aux command with grep
นั่นคือ มองหา vim แต่อย่าแสดงให้เราเห็นกระบวนการ grep ที่กำลังมองหา vim ตอนนี้มา kill กระบวนการ เราจะเริ่มด้วย killall และจากนั้นลอง kill
การ Kill กระบวนการ (Killall & Kill)
โอเค เรามีสิ่งที่เราต้องการ ชื่อกระบวนการ (vim) และ process ID (140464) killall ใช้ชื่อ และ kill ใช้ process ID แต่ละอันส่งชุดสัญญาณเดียวกัน: HUP, INT, KILL, TERM, และ STOP เป็นที่พบบ่อยที่สุด หากคุณต้องการเรียนรู้เพิ่มเติม ตรวจสอบรายการด้วย kill -l

kill -l command
ลองขุดลึกลงไปในสัญญาณทั่วไป:
- HUP, ค่าสัญญาณ 1 Hangup ตัวแปรเก่าแก่ที่อยู่รอดมาตั้งแต่โทรศัพท์และโมเดม Hangup ในระบบส่วนใหญ่จะทำให้ daemon restart แทนที่จะจบ
- INT, ค่าสัญญาณ 2 Interrupt ปกติเมื่อโต้ตอบกับกระบวนการ คุณสามารถส่ง CTRL+C เพื่อ interrupt การส่ง kill -2 รันสัญญาณ interrupt เดียวกัน
- KILL, ค่าสัญญาณ 9 Kill นี่คือสิ่งที่เรามักมองหา มัน kill PID ทันที
- TERM, ค่าสัญญาณ 15 Terminate นี่คือพฤติกรรมปกติสำหรับกระบวนการที่จบลง หากคุณต้องการเป็นกรุณากับกระบวนการ นี่คือวิธีที่คุณต้องการจบลงอย่างสง่างาม โดยค่าเริ่มต้น kill ส่งสัญญาณ 15
- STOP, ค่าสัญญาณ 17, 19, 23 นี่หยุดกระบวนการชั่วคราว พูดว่าคุณกำลังคัดลอกไดเรกทอรีใหญ่ และตระหนักว่าต้องการลบโฟลเดอร์บางส่วน ส่ง SIGSTOP ลบโฟลเดอร์ และ resume ด้วย SIGCONT
โอเค ฉันเพิ่มค่าสัญญาณ นี่คือค่าตัวเลขของสัญญาณและสามารถใช้ในคำสั่ง kill ของคุณแทนการพิมพ์ SIGHUP ตัวอย่างเช่น:
- killall -9 vim
จะพยายาม kill ทุกอย่างที่ชื่อ vim ฉันแนะนำว่าเมื่อใดก็ตามที่คุณใช้ killall คุณควรตรวจสอบว่ากระบวนการของคุณถูก kill สำเร็จแล้ว

killall -9 vim
หากมีอะไรเหลืออยู่ kill ด้วยตนเองด้วย kill -9 ตามด้วย process id เช่น:
- kill -9 140464
สรุป
นี่คือมัน คำอธิบายง่ายๆ ของการ kill กระบวนการ เริ่มด้วย top สำหรับกระบวนการ overrun ใช้ killall กับกระบวนการกราฟิกที่ค้าง แยกเศษซากด้วย kill นั่นจะดูแลส่วนใหญ่ของปัญหาของคุณ
เมื่อสงสัย ให้ reboot ปฏิบัติตามขั้นตอนการแจ้งเตือนที่เหมาะสมก่อนทำ เรียนรู้คำสั่ง shell เพิ่มเติม และปรับปรุงทักษะ Linux ของคุณ