Lệnh pstree là một lệnh dòng lệnh trong Linux dùng để hiển thị các tiến trình đang chạy dưới dạng cây cha – con. Việc dùng lệnh pstree sẽ giúp bạn hiểu rõ quan hệ cha – con giữa các tiến trình để truy vết nguồn gốc một process bất thường hoặc ngốn tài nguyên. Bài viết này được mình đúc kết từ quá trình trực tiếp xử lý các trường hợp treo server do tiến trình con gây ra cho hàng ngàn khách hàng. Trong bài viết dưới đây, mình sẽ cùng bạn tìm hiểu rõ lợi ích và cách sử dụng lệnh pstree qua các ví dụ cụ thể.
Những điểm chính
- Quan điểm của mình: Trong các tình huống server bị overload, pstree là công cụ tốt nhất để bạn biết chính xác dịch vụ nào đang sinh ra hàng loạt tiến trình con gây lãng phí tài nguyên.
- Khái niệm: Hiểu rõ cách thức hiển thị tiến trình dưới dạng sơ đồ cây phân cấp của lệnh pstree để nắm bắt luồng hoạt động từ gốc đến các ứng dụng con.
- Lợi ích khi sử dụng: Biết cách dùng
pstreeđể tinh gọn giao diện giám sát, truy vết nguồn gốc sự cố và quản lý các tiến trình bị treo hiệu quả hơn. - Các tùy chọn quan trọng: Làm chủ bảng tham số kỹ thuật để tùy biến hiển thị PID, tên người dùng, toàn bộ dòng lệnh và highlight tiến trình cụ thể.
- Ví dụ sử dụng thực tế: Thành thạo các kỹ năng kiểm tra subprocess, đếm số lượng worker và kỹ thuật tìm kiếm tiến trình mồ côi chuyên nghiệp.
- Lưu ý khi vận hành: Ghi nhớ các đặc điểm về dữ liệu tĩnh, cơ chế gộp nhánh và thứ tự sắp xếp mặc định để diễn giải chính xác tình trạng hệ thống.
- Câu hỏi thường gặp: Giải đáp chi tiết các thắc mắc liên quan đến lệnh pstree.
Lệnh pstree là gì?
pstree (Process Tree) là công cụ dòng lệnh trong Linux dùng để hiển thị danh sách các tiến trình đang chạy dưới dạng sơ đồ cây phân cấp. Thay vì hiển thị một danh sách liệt kê dài dòng và rời rạc như lệnh ps hay top, pstree sắp xếp lại các tiến trình dựa trên mối quan hệ cha – con, giúp quản trị viên nhìn thấy rõ tiến trình nào đã sinh ra tiến trình nào.
Trong cấu trúc cây của lệnh pstree:
- Gốc: Cây luôn bắt đầu từ tiến trình khởi tạo đầu tiên của hệ thống, thường là systemd hoặc init với PID là 1.
- Nhánh: Từ tiến trình gốc, cây tỏa ra các nhánh đại diện cho các dịch vụ và ứng dụng con đang chạy trên máy chủ.

Cú pháp và các tùy chọn phổ biến của lệnh pstree
Cú pháp lệnh
Cú pháp lệnh pstree như sau:
pstree [options] [PID|user]Trong đó:
[options]: Là các tùy chọn giúp thay đổi cách hiển thị kết quả.[PID|user]: Chỉ định gốc của cây:- Nếu truyền một PID: pstree 1943 sẽ vẽ cây với tiến trình PID 1943 làm gốc.
- Nếu truyền một tên user: pstree alice sẽ hiển thị tất cả cây tiến trình thuộc về user đó.
Các tùy chọn quan trọng của lệnh pstree
Dưới đây là bảng giải thích chi tiết các tùy chọn thường dùng nhất của lệnh pstree:
| Tùy chọn | Công dụng |
|---|---|
-p | Hiển thị Process ID (PID) bên cạnh tên của từng tiến trình. |
-a | Hiển thị toàn bộ câu lệnh khởi chạy và các tham số đi kèm. |
-u | Hiển thị user sở hữu tiến trình. |
-h | Highlight tiến trình hiện tại bạn đang thao tác trên terminal. |
-n | Sắp xếp các tiến trình theo thứ tự PID thay vì alphabet. |
-np | Sắp xếp tiến trình con theo PID và hiển thị PID bên cạnh tên tiến trình. |
-l | Hiển thị đầy đủ dòng lệnh của tiến trình, không cắt bớt khi quá dài. |
-s <PID> | In ra chuỗi tiến trình cha dẫn tới PID được chỉ định, giúp xem tiến trình đó xuất phát từ đâu. |
<tên người dùng> | Khi truyền một username, chỉ hiển thị cây các tiến trình thuộc về người dùng đó. |
-c | Tắt tính năng gộp nhánh. Lệnh sẽ bung toàn bộ từng tiến trình con giống nhau ra thành từng dòng riêng biệt thay vì hiển thị dạng 3*[...]. |
-C age | Hiển thị mã màu sắc theo thời gian sống của tiến trình. Ví dụ: Tiến trình vừa chạy trong 60 giây qua có màu xanh lá, chạy hơn 1 giờ có màu vàng. |
-g | Hiển thị Process Group ID (PGID) để quản lý nhóm tiến trình tập trung. |
Những lợi ích khi sử dụng lệnh pstree
Việc sử dụng lệnh pstree mang lại những lợi ích quan trọng trong việc quản trị hệ thống:
- Hiểu rõ mối quan hệ cha – con: Lợi ích lớn nhất của pstree là khả năng hiển thị sự phụ thuộc giữa các tiến trình, giúp bạn hiểu rõ luồng hoạt động của hệ thống.
- Tinh gọn màn hình hiển thị: Thay vì liệt kê hàng trăm dòng cho các tiến trình giống hệt nhau, lệnh pstree tự động gộp chúng lại thành một nhánh duy nhất, giúp giao diện gọn gàng và dễ đọc hơn rất nhiều so với lệnh ps.
- Truy vết nguồn gốc sự cố: Khi thấy một tiến trình lạ hoặc tiêu tốn tài nguyên, pstree giúp bạn truy ngược lên trên để tìm ra tiến trình cha đã khởi chạy. Điều này hỗ trợ tốt trong việc phát hiện phần mềm độc hại hoặc các script chạy ngầm.
- Hỗ trợ dọn dẹp tiến trình hiệu quả: Lệnh pstree giúp bạn xác định đúng tiến trình root để tắt thay vì tắt thủ công từng tiến trình con. Khi đó, bạn chỉ cần tắt tiến trình cha, toàn bộ cây tiến trình con bên dưới sẽ tự động dừng theo.
- Phát hiện Orphan Processes: Lệnh pstree giúp quản trị viên dễ dàng nhận diện các tiến trình bị mất kết nối với tiến trình cha và được hệ thống nhận nuôi, từ đó có phương án xử lý phù hợp.
- Trực quan hóa luồng: Với tùy chọn hiển thị thread, pstree cho phép nhìn thấy cấu trúc đa luồng của một ứng dụng phức tạp dưới dạng cây, giúp lập trình viên hiểu cách ứng dụng phân chia tác vụ.

Hướng dẫn cài đặt lệnh pstree trên Linux
Hầu hết các bản phân phối Linux hiện nay đều đã cài đặt sẵn lệnh pstree. Tuy nhiên, nếu hệ thống báo lỗi không tìm thấy lệnh (command not found), bạn có thể dễ dàng cài đặt vì pstree là một phần cốt lõi của bộ tiện ích psmisc.
Cú pháp cài đặt cơ bản:
- Trên Ubuntu/Debian:
sudo apt install psmisc- Trên CentOS/RHEL:
sudo yum install psmisc- Trên Arch Linux:
sudo pacman -S psmiscMẹo từ chuyên gia: Bộ công cụ psmisc ngoài lệnh pstree ra còn chứa lệnh killall và fuser cực kỳ mạnh mẽ. Khi cài đặt xong, bạn nên tìm hiểu thêm 2 lệnh này để quản trị server hiệu quả hơn.
Các ví dụ sử dụng lệnh pstree thực tế
Xem toàn bộ cây tiến trình kèm PID
Để có cái nhìn tổng quan về hệ thống và xác định nhanh nhóm tiến trình bất thường, bạn dùng lệnh dưới đây:
pstree -p
Mẹo từ chuyên gia: Nếu hệ thống của bạn quá lớn, đừng chạy pstree -p trực tiếp vì sẽ làm trôi màn hình. Bạn hãy kết hợp với less để cuộn xem dễ dàng hơn: pstree -p | less. Đây là cách mình thường dùng để tìm kiếm các nhánh tiến trình bị treo nhanh chóng.
Kiểm tra tất cả tiến trình con của một PID cụ thể
Khi cần kiểm tra một tiến trình bất thường, bạn có thể xem tất cả tiến trình con mà tiến trình đó tạo ra bằng lệnh sau:
pstree -p 728
Thao tác này rất hữu ích khi bạn cần debug các ứng dụng tạo ra quá nhiều subprocess.
Kiểm tra tiến trình theo từng user
Thao tác này cần thiết khi bạn cần kiểm tra hệ thống để xem user nào đang chạy những gì. Ví dụ, để kiểm tra user root, bạn chạy lệnh dưới đây:
pstree -u root
Bạn có thể thấy user deploy hiện đang kết nối SSH tới và đang mở vi để chỉnh sửa file. Để kiểm tra kỹ hơn xem họ đang sửa file nào, bạn có thể thực hiện kiểm tra tiến trình bằng ps và lsof.
Mẹo từ chuyên gia: Nếu bạn phát hiện một user bình thường (không có quyền root) lại đang sở hữu quá nhiều cây tiến trình lạ kết nối ra Internet, đó là dấu hiệu 90% website hoặc user đó đã bị hacker khai thác. Bạn cần lập tức tạm khóa user và dùng lsof -p <PID> để kiểm tra file đang thực thi.
Kết hợp pstree và awk để đếm tiến trình con theo tên
Giả sử, bạn muốn biết hiện có tổng cộng bao nhiêu process con của httpd mà không muốn đếm thủ công, bạn hãy dùng lệnh sau để xuất ra kết quả định lượng:
pstree -p | awk '/httpd/ {count++} END {print count " httpd workers"}'

Lệnh này giúp bạn có cái nhìn định lượng cụ thể thay vì chỉ quan sát trực quan.
Tìm tiến trình mồ côi bằng ps và pstree
Để tìm các tiến trình mồ côi (có PPID là 1 do được init/systemd nhận nuôi) và phân tích nhóm của chúng, bạn sử dụng chuỗi lệnh sau:
ps -eo ppid,pid,cmd | grep '^ *1 ' | awk '{print $2}' | xargs -I{} pstree -p {}Trong đó:
ppid == 1: Xác định các tiến trình mồ côi.xargs: Chạypstreecho từng PID tìm được để phân tích nhóm.

Lưu ý khi sử dụng lệnh pstree
Khi sử dụng pstree, bạn cần lưu ý những điểm sau để tránh hiểu sai thông tin hệ thống hoặc gặp khó khăn khi thao tác:
- Dữ liệu là tĩnh: Khác với top hay htop tự động cập nhật liên tục, pstree chỉ chụp lại trạng thái hệ thống tại đúng thời điểm bạn gõ lệnh. Nếu một tiến trình vừa tắt ngay sau đó, màn hình kết quả sẽ không tự thay đổi.
- Mặc định không hiển thị PID: pstree không tham số sẽ chỉ hiển thị tên tiến trình. Nếu bạn muốn dùng lệnh này để tìm ID nhằm tắt một ứng dụng treo, bạn bắt buộc phải thêm cờ
-pđể thấy số PID bên cạnh tên. - Chú ý các nhánh bị gộp: Để làm gọn màn hình, pstree sẽ gộp các tiến trình con giống nhau lại. Do đó, bạn cần chú ý con số phía trước để nhận thức đúng về số lượng thực tế, tránh chủ quan nghĩ rằng chỉ có một tiến trình đang chạy.
- Thứ tự sắp xếp mặc định: pstree mặc định sắp xếp các tiến trình cùng cấp theo tên, không phải theo thứ tự thời gian khởi chạy hay PID. Điều này có thể làm thay đổi cấu trúc so với thứ tự khởi động thực tế. Nếu muốn sắp xếp theo PID (thời gian), bạn cần dùng cờ
-n. - Tên lệnh có thể bị cắt ngắn: Trong một số trường hợp, nếu tên tiến trình hoặc đường dẫn quá dài, pstree có thể hiển thị không đầy đủ. Bạn nên dùng cờ
-anếu muốn xem đầy đủ câu lệnh khởi chạy và các tham số đi kèm. - Phân biệt Thread và Process: Khi sử dụng cờ
-tđể hiển thị luồng, cây sơ đồ sẽ trở nên rất lớn và phức tạp. Bạn cần cẩn thận để không nhầm lẫn giữa một luồng con và một tiến trình độc lập vì chúng có thể hiển thị khá giống nhau trên cây.

Câu hỏi thường gặp
Các dấu ngoặc nhọn {…} trong kết quả pstree có ý nghĩa gì?
Khi bạn thấy tên tiến trình nằm trong dấu ngoặc nhọn thì đó là đại diện cho các luồng của một tiến trình cha, chứ không phải là một tiến trình độc lập. Để ẩn các luồng này, bạn có thể không dùng tùy chọn -t hoặc dùng tùy chọn -c để gộp chúng lại.
Làm thế nào để tắt toàn bộ một cây tiến trình?
Nguyên tắc hoạt động của Linux là khi tiến trình cha bị tắt, các tiến trình con thường cũng sẽ bị tắt theo. Do đó, cách nhanh nhất để tắt cả một cây là dùng pstree -p để tìm PID của tiến trình cha cao nhất trong nhánh đó, sau đó dùng lệnh kill để kết thúc PID đó.
pstree và ps aux –forest có giống nhau không?
Về mặt hiển thị, cả hai đều thể hiện cấu trúc cây phân cấp. Tuy nhiên:
– pstree: Trực quan và gọn gàng hơn vì pstree gộp các tiến trình con giống nhau lại.
– ps aux --forest: Hiển thị chi tiết hơn về tài nguyên của từng nhánh nhưng giao diện sẽ dài và khó nhìn hơn.
Lệnh pstree giúp bạn hiểu rõ cấu trúc cha – con của các tiến trình, từ đó xác định sự cố nhanh hơn, giúp tối ưu hóa hệ thống hiệu quả hơn và xử lý vấn đề một cách chính xác. Ngoài ra, việc nắm vững pstree cùng các tùy chọn sẽ giúp bạn rút ngắn đáng kể thời gian khoanh vùng sự cố, đặc biệt là trong các tình huống hệ thống bị tấn công hoặc quá tải do một ứng dụng sinh ra quá nhiều tiến trình con.




