Có nhiều phương pháp có thể dùng để kill một process trong Linux. Hướng dẫn này sẽ dạy bạn cách tìm và kill process bị lỗi.
Một process có thể trở thành orphaned dễ dàng. Dù cố ý hay không, process cha có thể crash và để process con chạy. Đôi khi, process cha không thu gom process con đã hoàn thành, và nó trở thành zombie.
Cả hai process này bị mắc kẹt và cần can thiệp thủ công. Nhập job control. Hãy xem cách kill process bị lỗi.
Hãy xem vài lệnh:
- top (và tại sao htop có thể tốt hơn)
- ps
- kill
Top (Tìm và Hủy diệt)
Trước khi bạn bắt đầu gửi tín hiệu kill đến tất cả process, bạn cần biết bạn có gì. Chúng ta không giả định chúng ta có process lỗi chạy, và biết chính xác tìm gì. Đó là những gì chúng ta có top cho. Hãy chạy vim và cho nó chạy nền.

vim
Ổn, bây giờ chúng ta có process không thể tương tác bình thường. Hãy chạy top. Output bình thường không hữu ích, nên chạy filter.
- Nhấn shift+l
- Gõ vim
- Nhấn enter

top
Đó là output. Bạn sẽ nhận thấy dòng đầu, nó báo uptime, số user, và load averages. Bạn cũng nhận thấy thông tin quan trọng trong các cột. Ngày bình thường tôi xem S, %CPU, và TIME+. Nếu process ở state Z (zombie) tôi biết kill nó. Nếu process quá 100% CPU, nó overrun và cũng có thể cần kill. Hoặc nếu process chạy vài ngày, có thể đến lúc restart. Dù đó có thể là paranoia, và không cần thiết trong đa số trường hợp.
Hôm nay chúng ta xem dòng hai, săn zombie và tìm orphan. Cho ví dụ chúng ta không có process zombie chạy, nên lọc cho “2 stopped” process.
- Nhấn o
- Gõ: S=T

Lọc top
Bây giờ chúng ta lọc xuống chỉ process ở S=T (state=stopped), chúng ta có thể kill chúng. Trong top, bạn có thể nhấn k, nhập PID process, và nhấn enter. Nếu bạn chạy qua, bạn nhận thấy có thể mất chút để kết thúc. Thay vào đó, nhấn k lại, nhập PID, và đổi signal thành 9.
Nó không hoàn hảo, nhưng nếu bạn có cửa sổ top chạy như cửa sổ trạng thái, bạn đã ở đó. Bạn cũng có thể gửi tín hiệu kill thay vì tín hiệu stop.
htop
Ổn, tôi thừa nhận. Nó không khác nhiều top. Trừ màu sắc.

htop
Màu sắc nhiều vậy.
PS
PS, process status. Tiện ích native đáng yêu để xem thông tin process trên hệ thống. Công cụ này đọc từ file trong /proc. Hầu hết ngày, bạn sẽ dùng:

PS
- -a, hiển thị process cho tất cả user
- -u, hiển thị owner process
- -x, hiển thị process không gắn terminal
Chạy ps -aux một mình sẽ cho bạn mọi thứ, nhưng hiếm khi hữu ích. Hãy pipe đến grep, và tìm vim mất tích.

ps-aux command
Và nó đó! Bạn cũng sẽ thấy lệnh grep hiện tại của bạn ở đó. Nếu bạn không muốn đó, đổi grep một chút.

ps-aux command with grep
Đó. Tìm vim, nhưng không cho chúng ta thấy process grep tìm vim. Bây giờ hãy kill process. Chúng ta bắt đầu với killall, rồi thử kill.
Kill Process (Killall & Kill)
Ổn, chúng ta có gì cần. Tên process (vim) và process ID (140464). killall dùng tên, và kill dùng process ID. Mỗi cái gửi cùng tập tín hiệu: HUP, INT, KILL, TERM, và STOP là phổ biến nhất. Nếu muốn học thêm, kiểm tra danh sách với kill -l.

kill -l command
Hãy đào sâu vào tín hiệu phổ biến:
- HUP, Giá trị tín hiệu 1. Hangup. Thuật ngữ lỗi thời tồn tại từ điện thoại và modem. Hangup trong hầu hết hệ thống sẽ khiến daemon restart, thay vì kết thúc.
- INT, Giá trị tín hiệu 2. Interrupt. Thường, khi tương tác với process bạn có thể gửi CTRL+C để interrupt. Gửi kill -2 chạy cùng tín hiệu interrupt.
- KILL, Giá trị tín hiệu 9. Kill. Đây là cái chúng ta thường tìm. Nó kill PID ngay lập tức.
- TERM, Giá trị tín hiệu 15. Terminate. Đây là hành vi bình thường cho process kết thúc. Nếu bạn muốn tử tế với process, đây là cách bạn muốn kết thúc nó, nhẹ nhàng. Mặc định, kill gửi tín hiệu 15.
- STOP, Giá trị tín hiệu 17, 19, 23. Tạm dừng process. Giả sử bạn copy thư mục lớn, và nhận ra muốn xóa vài thư mục. Gửi SIGSTOP, xóa thư mục, và tiếp tục với SIGCONT.
Ổn, tôi thêm giá trị tín hiệu. Đó là giá trị số của tín hiệu và có thể dùng trong lệnh kill thay vì gõ SIGHUP. Ví dụ:
- killall -9 vim
Sẽ thử kill mọi thứ tên vim. Tôi khuyên bất cứ khi nào bạn dùng killall, hãy xác minh process đã kill thành công sau đó.

killall -9 vim
Nếu còn gì lại, kill thủ công với kill -9 theo sau process id. ví dụ:
- kill -9 140464
Kết luận
Đó là nó, giải thích đơn giản kill process. Bắt đầu với top cho process overrun. Dùng killall cho process đồ họa bị kẹt. Cách ly phần còn lại với kill. Đó sẽ lo phần lớn vấn đề của bạn.
Khi nghi ngờ, reboot. Tuân thủ thủ tục thông báo đúng trước khi làm. Tìm hiểu thêm lệnh shell, và ôn tập kỹ năng Linux.