pgrep command in linux

Giới thiệu về lệnh pgrep trong Linux: Tìm kiếm tiến trình một cách dễ dàng

Bạn đã bao giờ gặp phải tình huống cần tìm kiếm một tiến trình cụ thể đang chạy trên hệ thống Linux của mình? Có lẽ bạn muốn kiểm tra xem một ứng dụng nào đó có đang hoạt động hay không, hoặc bạn cần tìm PID (Process ID) của một tiến trình để thực hiện các thao tác khác. Trong những trường hợp như vậy, lệnh pgrep trong Linux sẽ là một công cụ vô cùng hữu ích.

pgrep là một lệnh dòng lệnh cho phép bạn tìm kiếm 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. Nó đơn giản, mạnh mẽ và dễ sử dụng, làm cho nó trở thành một phần không thể thiếu trong bộ công cụ của bất kỳ người dùng Linux nào, từ người mới bắt đầu đến các chuyên gia.

Trong bài viết này, chúng ta sẽ khám phá sâu hơn về lệnh pgrep, từ cú pháp cơ bản đến các tùy chọn nâng cao, cùng với các ví dụ thực tế để giúp bạn nắm vững cách sử dụng nó một cách hiệu quả. Hãy cùng bắt đầu!

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

Cú pháp của lệnh pgrep khá đơn giản:

pgrep [options] pattern

Trong đó:

  • pgrep là tên của lệnh.
  • [options] là các tùy chọn (không bắt buộc) để điều chỉnh cách thức tìm kiếm.
  • pattern là chuỗi ký tự hoặc biểu thức chính quy (regular expression) mà bạn muốn tìm kiếm trong tên hoặc các thuộc tính khác của tiến trình.

Ví dụ, để tìm tất cả các tiến trình có tên chứa "firefox", bạn có thể sử dụng lệnh sau:

pgrep firefox

Lệnh này sẽ trả về PID của tất cả các tiến trình có tên chứa chuỗi "firefox". Nếu không có tiến trình nào khớp với mẫu tìm kiếm, pgrep sẽ không trả về gì cả.

Các tùy chọn phổ biến của lệnh pgrep

pgrep cung cấp một loạt các tùy chọn để giúp bạn tinh chỉnh quá trình tìm kiếm. Dưới đây là một số tùy chọn phổ biến nhất:

  • -i: Bỏ qua phân biệt chữ hoa chữ thường. Ví dụ: pgrep -i Firefox sẽ tìm thấy cả "firefox" và "Firefox".
  • -v: Đảo ngược kết quả tìm kiếm, tức là tìm các tiến trình không khớp với mẫu. Ví dụ: pgrep -v firefox sẽ tìm tất cả các tiến trình không có tên chứa "firefox".
  • -c: Chỉ in số lượng tiến trình khớp với mẫu. Ví dụ: pgrep -c firefox sẽ in ra số lượng tiến trình có tên chứa "firefox".
  • -l: Hiển thị tên tiến trình cùng với PID của nó. Ví dụ: pgrep -l firefox sẽ hiển thị cả PID và tên của tất cả các tiến trình có tên chứa "firefox".
  • -u user: Chỉ tìm kiếm các tiến trình thuộc sở hữu của người dùng cụ thể. Ví dụ: pgrep -u john firefox sẽ chỉ tìm các tiến trình có tên chứa "firefox" và thuộc sở hữu của người dùng "john".
  • -P parent_pid: Chỉ tìm kiếm các tiến trình con của tiến trình có PID cụ thể. Ví dụ: pgrep -P 1234 firefox sẽ chỉ tìm các tiến trình có tên chứa "firefox" và là con của tiến trình có PID là 1234.
  • -f: Tìm kiếm mẫu trong toàn bộ dòng lệnh của tiến trình, thay vì chỉ trong tên tiến trình. Điều này hữu ích khi bạn muốn tìm kiếm các tiến trình dựa trên các tham số dòng lệnh của chúng.
  • -x: Chỉ tìm kiếm các tiến trình có tên hoàn toàn khớp với mẫu. Ví dụ: pgrep -x firefox sẽ chỉ tìm tiến trình có tên chính xác là "firefox", không phải "firefox-bin" hay "firefox_helper".

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

Để giúp bạn hiểu rõ hơn về cách sử dụng pgrep, chúng ta hãy xem xét một số ví dụ thực tế:

  1. Tìm PID của tiến trình Apache:

    Giả sử bạn muốn tìm PID của tiến trình Apache. Bạn có thể sử dụng lệnh sau:

    pgrep apache2

    Lệnh này sẽ trả về PID của tiến trình Apache.

  2. Kiểm tra xem tiến trình nào đang sử dụng cổng 80:

    Bạn có thể sử dụng kết hợp pgrepnetstat (hoặc ss) để kiểm tra xem tiến trình nào đang sử dụng cổng 80:

    netstat -tulnp | grep ":80" | awk '{print $7}' | cut -d'/' -f1 | xargs pgrep -f

    Lệnh này sẽ hiển thị tên của tiến trình đang sử dụng cổng 80.

  3. Tìm tất cả các tiến trình Java:

    Để tìm tất cả các tiến trình Java đang chạy trên hệ thống, bạn có thể sử dụng lệnh sau:

    pgrep -f java

    Lưu ý tùy chọn -f, cho phép tìm kiếm trong toàn bộ dòng lệnh, vì tên tiến trình Java thường không chứa từ "java".

  4. Giết một tiến trình dựa trên tên:

    Bạn có thể sử dụng pgrep kết hợp với kill để giết một tiến trình dựa trên tên của nó. Ví dụ, để giết tất cả các tiến trình có tên "chrome", bạn có thể sử dụng lệnh sau:

    kill $(pgrep chrome)

    CẢNH BÁO: Hãy cẩn thận khi sử dụng lệnh kill, vì nó có thể gây ra mất dữ liệu hoặc sự cố hệ thống nếu bạn giết nhầm tiến trình. Luôn kiểm tra kỹ PID trước khi giết một tiến trình.

  5. Tìm kiếm tiến trình con của một tiến trình cha cụ thể:

    Giả sử bạn có một tiến trình cha có PID là 1234 và bạn muốn tìm tất cả các tiến trình con của nó có liên quan đến "node":

    pgrep -P 1234 node

    Lệnh này sẽ trả về PID của tất cả các tiến trình con của tiến trình có PID là 1234 và có tên chứa "node".

So sánh pgrep với các lệnh tương tự

Có một số lệnh khác trong Linux có chức năng tương tự như pgrep. Dưới đây là so sánh giữa pgrep và một số lệnh phổ biến khác:

Lệnh Ưu điểm Nhược điểm Khi nào nên sử dụng
pgrep Đơn giản, dễ sử dụng, nhiều tùy chọn tìm kiếm. Chỉ tìm kiếm dựa trên tên và các thuộc tính khác của tiến trình. Khi bạn cần tìm kiếm 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 một cách nhanh chóng và dễ dàng.
ps Hiển thị thông tin chi tiết về tất cả các tiến trình. Đầu ra phức tạp, khó lọc thông tin cần thiết. Khi bạn cần xem thông tin chi tiết về tất cả các tiến trình, hoặc khi bạn cần lọc thông tin dựa trên nhiều tiêu chí phức tạp.
pidof Đơn giản, chỉ trả về PID của tiến trình. Ít tùy chọn, chỉ tìm kiếm dựa trên tên tiến trình. Khi bạn chỉ cần tìm PID của một tiến trình cụ thể một cách nhanh chóng.
top Hiển thị thông tin thời gian thực về các tiến trình đang chạy, bao gồm cả việc sử dụng CPU và bộ nhớ. Không phù hợp để tìm kiếm tiến trình dựa trên tên hoặc thuộc tính. Khi bạn muốn theo dõi hiệu suất hệ thống và xem các tiến trình nào đang sử dụng nhiều tài nguyên nhất.

Câu hỏi thường gặp (FAQ) về lệnh pgrep

  1. pgrep có thể tìm kiếm các tiến trình đã dừng (stopped) không?

    Không, pgrep chỉ tìm kiếm các tiến trình đang chạy.

  2. Làm thế nào để tìm kiếm các tiến trình có tên chứa khoảng trắng?

    Bạn có thể đặt tên tiến trình trong dấu ngoặc kép. Ví dụ: pgrep "My Process".

  3. Làm thế nào để tìm kiếm các tiến trình không thuộc sở hữu của người dùng cụ thể?

    Bạn có thể sử dụng tùy chọn -v kết hợp với -u. Ví dụ: pgrep -v -u john sẽ tìm tất cả các tiến trình không thuộc sở hữu của người dùng "john".

  4. Tôi có thể sử dụng biểu thức chính quy (regular expression) trong pgrep không?

    Có, bạn có thể sử dụng biểu thức chính quy để tìm kiếm các tiến trình. Ví dụ: pgrep '^apache' sẽ tìm tất cả các tiến trình có tên bắt đầu bằng "apache".

Kết luận

Lệnh pgrep là một công cụ mạnh mẽ và linh hoạt để tìm kiếm các tiến trình trong Linux. Với cú pháp đơn giản và nhiều tùy chọn, nó có thể giúp bạn dễ dàng tìm thấy các tiến trình bạn cần, từ đó thực hiện các thao tác khác như giám sát, quản lý hoặc kết thúc chúng. Hy vọng rằng bài viết này đã cung cấp cho bạn một cái nhìn tổng quan về lệnh pgrep và cách sử dụng nó một cách hiệu quả.

Hãy nhớ rằng, việc nắm vững các công cụ dòng lệnh là một kỹ năng quan trọng đối với bất kỳ người dùng Linux nào. Hãy thử nghiệm với pgrep và các lệnh khác để nâng cao kiến thức và kỹ năng của bạn!

Last Updated : 22/08/2025