Đôi khi, khi làm việc trên máy Linux, bạn sẽ thấy một ứng dụng hoặc một tiến trình dòng lệnh bị kẹt (không phản hồi). Khi đó, cách duy nhất để thoát khỏi những trường hợp đó là chấm dứt tiến trình đó. Dòng lệnh Linux cung cấp một tiện ích mà bạn có thể sử dụng trong những tình huống này. Tiện ích đó có tên là kill.
Trong hướng dẫn này, chúng ta sẽ thảo luận về những điều cơ bản của lệnh kill bằng một số ví dụ dễ hiểu. Nhưng trước khi thực hiện, cần lưu ý rằng tất cả các ví dụ trong bài viết đều đã được thử nghiệm trên máy Ubuntu 16.04.
Và đây là cách trang hướng dẫn của công cụ mô tả nó:
Các ví dụ theo kiểu Hỏi & Đáp sau đây sẽ giúp bạn hiểu rõ hơn về cách lệnh kill hoạt động.
Ví dụ, tôi muốn kill tiến trình 'gthumb' trên hệ thống của mình. Vì vậy, trước tiên tôi sử dụng lệnh ps để lấy pid của ứng dụng, sau đó truyền nó cho lệnh kill để kết thúc tiến trình đó. Đây là ảnh chụp màn hình hiển thị tất cả những điều này:
Ví dụ, nếu một tiến trình không phản hồi tín hiệu TERM (cho phép tiến trình thực hiện dọn dẹp cuối cùng trước khi thoát), bạn có thể sử dụng tín hiệu KILL (không cho phép tiến trình thực hiện bất kỳ dọn dẹp nào). Sau đây là lệnh bạn cần chạy trong trường hợp đó.
Sau đây là kết quả mà lệnh trên tạo ra trên hệ thống của chúng tôi:
Tuy nhiên, cũng có một số giải pháp thay thế khác:
Có thể biết số tương ứng bằng cách sử dụng tùy chọn -l mà chúng ta đã thảo luận trong ví dụ trước.
Ví dụ:
Trong hướng dẫn này, chúng ta sẽ thảo luận về những điều cơ bản của lệnh kill bằng một số ví dụ dễ hiểu. Nhưng trước khi thực hiện, cần lưu ý rằng tất cả các ví dụ trong bài viết đều đã được thử nghiệm trên máy Ubuntu 16.04.
Lệnh kill của Linux
Lệnh kill thường được dùng để kill một tiến trình. Về mặt nội bộ, nó sẽ gửi một tín hiệu và tùy thuộc vào mục đích bạn muốn thực hiện, có nhiều tín hiệu khác nhau mà bạn có thể gửi bằng công cụ này. Sau đây là cú pháp của lệnh:
Mã:
kill [tùy chọn]
[...]
Mã:
Tín hiệu mặc định cho lệnh kill là TERM. Sử dụng -l hoặc -L để liệt kê các tín hiệu khả dụng. Các tín hiệu
đặc biệt hữu ích bao gồm HUP, INT, KILL, STOP, CONT và 0. Có thể chỉ định các tín hiệu thay thế theo ba cách:
-9, -SIGKILL hoặc -KILL. Có thể sử dụng các giá trị PID âm để chọn toàn bộ nhóm quy trình; hãy xem cột PGID
trong đầu ra lệnh ps. PID bằng -1 là đặc biệt; nó chỉ ra tất cả các quy trình ngoại trừ chính quy trình kill
và init.
Câu hỏi 1. Làm thế nào để kết thúc một tiến trình bằng lệnh kill?
Điều này rất dễ - tất cả những gì bạn cần làm là lấy pid của tiến trình bạn muốn kill, sau đó truyền nó cho lệnh kill.
Mã:
kill [pid]
Câu hỏi 2. Làm thế nào để gửi tín hiệu tùy chỉnh?
Như đã đề cập trong phần giới thiệu, TERM là tín hiệu mặc định mà lệnh kill gửi đến ứng dụng/tiến trình đang đề cập. Tuy nhiên, nếu muốn, bạn có thể gửi bất kỳ tín hiệu nào khác mà lệnh kill hỗ trợ bằng tùy chọn dòng lệnh -s.
Mã:
kill -s [signal] [pid]
Mã:
kill -s KILL [pid]
Câu hỏi 3. Bạn có thể gửi tất cả các tín hiệu nào khi sử dụng lệnh kill?
Tất nhiên, câu hỏi hợp lý tiếp theo xuất hiện trong đầu bạn là làm thế nào để biết bạn có thể gửi tất cả các tín hiệu nào khi sử dụng lệnh kill. May mắn thay, có một tùy chọn dòng lệnh -l liệt kê tất cả các tín hiệu được hỗ trợ.
Mã:
kill -l
Câu hỏi 4. Có những cách nào khác để gửi tín hiệu?
Trong một ví dụ trước, chúng tôi đã nói với bạn rằng nếu bạn muốn gửi tín hiệu KILL, bạn có thể thực hiện theo cách sau:
Mã:
kill -s KILL [pid]
Mã:
kill -s SIGKILL [pid]
Mã:
kill -s 9 [pid]
Câu hỏi 5. Làm thế nào để giết tất cả các tiến trình đang chạy cùng một lúc?
Trong trường hợp người dùng muốn giết tất cả các tiến trình mà họ có thể (điều này phụ thuộc vào cấp độ đặc quyền của họ), thì thay vì chỉ định một số lượng lớn ID tiến trình, họ có thể chỉ cần truyền tùy chọn -1 để giết.Ví dụ:
Mã:
kill -s KILL -1