pkill command in linux

Lệnh pkill trong Linux: Chấm dứt tiến trình một cách dễ dàng

Bạn đã bao giờ gặp phải tình huống một ứng dụng "treo cứng" và bạn không biết làm cách nào để tắt nó? Hoặc bạn muốn dừng một loạt các tiến trình liên quan đến một người dùng cụ thể? Trong Linux, lệnh pkill là một công cụ mạnh mẽ giúp bạn giải quyết những vấn đề này một cách nhanh chóng và hiệu quả. Bài viết này sẽ cung cấp cho bạn một cái nhìn toàn diện về lệnh pkill, từ cú pháp cơ bản đến các ví dụ thực tế và các tùy chọn nâng cao.

pkill là gì?

pkill là một lệnh dòng lệnh trong Linux (và các hệ điều hành Unix-like khác) cho phép bạn gửi tín hiệu đến các tiến trình dựa trên tên hoặc các thuộc tính khác của chúng. Không giống như lệnh kill, yêu cầu bạn phải biết Process ID (PID) của tiến trình, pkill cho phép bạn xác định tiến trình dựa trên tên, người dùng sở hữu, hoặc các tiêu chí khác, giúp việc quản lý tiến trình trở nên dễ dàng hơn rất nhiều.

Cú pháp cơ bản của lệnh pkill

Cú pháp cơ bản của lệnh pkill như sau:

pkill [options] pattern

Trong đó:

  • options: Các tùy chọn để điều chỉnh hành vi của lệnh pkill.
  • pattern: Một chuỗi hoặc biểu thức chính quy (regular expression) để khớp với tên của tiến trình.

Các tùy chọn quan trọng của lệnh pkill

pkill cung cấp nhiều tùy chọn để bạn có thể tùy chỉnh hành vi của nó. Dưới đây là một số tùy chọn quan trọng nhất:

  • -u, --uid user: Chỉ tìm các tiến trình thuộc sở hữu của người dùng user.
  • -g, --gid group: Chỉ tìm các tiến trình thuộc sở hữu của nhóm group.
  • -t, --terminal tty: Chỉ tìm các tiến trình chạy trên terminal tty.
  • -x, --exact: Yêu cầu khớp chính xác với tên tiến trình. Nếu không có tùy chọn này, pkill sẽ tìm kiếm các tiến trình chứa chuỗi tìm kiếm trong tên của chúng.
  • -i, --ignore-case: Bỏ qua phân biệt chữ hoa chữ thường khi tìm kiếm.
  • -n: Chỉ chọn tiến trình mới nhất khớp với mẫu.
  • -o: Chỉ chọn tiến trình lâu đời nhất khớp với mẫu.
  • -s, --session sessionid: Chỉ tìm các tiến trình thuộc phiên sessionid.
  • -SIGNAL: Gửi tín hiệu SIGNAL đến các tiến trình. Nếu không chỉ định, tín hiệu mặc định là SIGTERM (15), tín hiệu này yêu cầu tiến trình dừng một cách "nhẹ nhàng". Bạn có thể sử dụng kill -l để xem danh sách các tín hiệu có sẵn.

Ví dụ thực tế về cách sử dụng lệnh pkill

Dưới đây là một số ví dụ thực tế về cách sử dụng lệnh pkill trong các tình huống khác nhau:

1. Tắt một tiến trình cụ thể theo tên

Giả sử bạn muốn tắt tiến trình có tên "firefox". Bạn có thể sử dụng lệnh sau:

pkill firefox

Lệnh này sẽ gửi tín hiệu SIGTERM đến tất cả các tiến trình có tên chứa "firefox".

2. Tắt một tiến trình chính xác theo tên

Để tắt chỉ tiến trình có tên chính xác là "firefox" (ví dụ, tránh tắt các tiến trình như "firefox-bin"), bạn sử dụng tùy chọn -x:

pkill -x firefox

3. Tắt tất cả các tiến trình thuộc sở hữu của một người dùng cụ thể

Để tắt tất cả các tiến trình thuộc sở hữu của người dùng "john", bạn sử dụng tùy chọn -u:

pkill -u john

CẢNH BÁO: Hãy cẩn thận khi sử dụng lệnh này, vì nó có thể tắt các tiến trình quan trọng mà người dùng đang chạy.

4. Tắt một tiến trình chạy trên một terminal cụ thể

Để tắt một tiến trình chạy trên terminal "pts/1", bạn sử dụng tùy chọn -t:

pkill -t pts/1

5. Gửi tín hiệu khác SIGTERM

Để gửi tín hiệu SIGKILL (9) (tín hiệu "cứng" buộc tiến trình dừng ngay lập tức) đến tiến trình "firefox", bạn sử dụng:

pkill -9 firefox

CẢNH BÁO: Chỉ sử dụng SIGKILL khi SIGTERM không hoạt động, vì nó có thể gây mất dữ liệu hoặc làm hỏng hệ thống.

6. Tìm tiến trình mới nhất và tắt nó

Để tắt tiến trình "gedit" mới nhất được khởi chạy, bạn sử dụng tùy chọn -n:

pkill -n gedit

So sánh pkill và kill

Cả pkill và kill đều được sử dụng để chấm dứt tiến trình, nhưng chúng có những khác biệt quan trọng. Dưới đây là bảng so sánh chi tiết:

Tính năng kill pkill
Xác định tiến trình Yêu cầu Process ID (PID) Có thể xác định tiến trình theo tên, người dùng, terminal, v.v.
Tính linh hoạt Ít linh hoạt hơn Linh hoạt hơn, có nhiều tùy chọn để tìm kiếm và lọc tiến trình
Sử dụng đơn giản Có thể phức tạp nếu không biết PID Dễ sử dụng hơn khi bạn không biết PID
Ví dụ kill 1234 (gửi tín hiệu đến tiến trình có PID 1234) pkill firefox (gửi tín hiệu đến tiến trình có tên "firefox")

Các tình huống thực tế khi sử dụng pkill

Dưới đây là một số tình huống thực tế mà bạn có thể sử dụng lệnh pkill:

  • Ứng dụng bị treo: Khi một ứng dụng không phản hồi, bạn có thể sử dụng pkill để tắt nó.
  • Quản lý tiến trình người dùng: Bạn có thể sử dụng pkill để tắt tất cả các tiến trình thuộc sở hữu của một người dùng cụ thể, ví dụ như khi một người dùng rời khỏi hệ thống.
  • Tự động hóa: Bạn có thể sử dụng pkill trong các script để tự động hóa việc quản lý tiến trình. Ví dụ, bạn có thể viết một script để tự động khởi động lại một dịch vụ nếu nó bị treo.

FAQ về lệnh pkill

Làm thế nào để biết tên chính xác của một tiến trình?
Bạn có thể sử dụng lệnh ps hoặc top để xem danh sách các tiến trình đang chạy và tên của chúng.
Tại sao tôi không thể tắt một số tiến trình bằng pkill?
Bạn có thể không có quyền để tắt các tiến trình đó. Chỉ người dùng root hoặc người dùng sở hữu tiến trình mới có thể tắt nó.
Sự khác biệt giữa SIGTERM và SIGKILL là gì?
SIGTERM là tín hiệu yêu cầu tiến trình dừng một cách "nhẹ nhàng", cho phép nó lưu dữ liệu và đóng các kết nối. SIGKILL là tín hiệu "cứng" buộc tiến trình dừng ngay lập tức, mà không có cơ hội để dọn dẹp. Luôn sử dụng SIGTERM trước, và chỉ sử dụng SIGKILL khi SIGTERM không hoạt động.
Làm thế nào để ngăn chặn người dùng sử dụng pkill để tắt các tiến trình quan trọng?
Bạn có thể sử dụng các công cụ quản lý quyền (như sudo) để hạn chế quyền truy cập vào lệnh pkill cho một số người dùng nhất định.

Kết luận

Lệnh pkill là một công cụ vô cùng hữu ích để quản lý tiến trình trong Linux. Bằng cách cho phép bạn xác định tiến trình dựa trên tên hoặc các thuộc tính khác, nó giúp việc chấm dứt các tiến trình trở nên dễ dàng và hiệu quả hơn so với việc sử dụng lệnh kill với PID. Hãy nhớ sử dụng pkill một cách cẩn thận và luôn kiểm tra kỹ trước khi gửi tín hiệu, đặc biệt là tín hiệu SIGKILL, để tránh gây ra các vấn đề không mong muốn.

Last Updated : 22/08/2025