Quản lý tiến trình là một kỹ năng cốt lõi khi làm việc với bất kỳ hệ điều hành nào, đặc biệt là Linux – một hệ thống đa nhiệm và đa người dùng mạnh mẽ. Mỗi chương trình, mỗi tác vụ bạn chạy đều tạo ra một hoặc nhiều tiến trình. Việc hiểu rõ những gì đang diễn ra “phía sau hậu trường” là chìa khóa để duy trì một hệ thống ổn định, an toàn và hiệu suất cao. Nếu không có công cụ để giám sát, bạn sẽ gặp khó khăn khi hệ thống chậm lại, ứng dụng bị treo hoặc tài nguyên bị tiêu thụ một cách bất thường. Bạn sẽ không biết nguyên nhân gốc rễ của vấn đề nằm ở đâu.
Đây chính là lúc lệnh ps (process status) tỏa sáng. Nó là một công cụ dòng lệnh cơ bản nhưng vô cùng quyền năng, cho phép bạn chụp lại một “bức ảnh” tức thời về tất cả các tiến trình đang chạy. Bài viết này sẽ là kim chỉ nam toàn diện, giúp bạn từ tìm hiểu lệnh ps là gì, cách sử dụng các tùy chọn phổ biến như ps aux và ps -ef, đến việc kết hợp nó với các công cụ khác để quản lý hệ thống một cách chuyên nghiệp. Hãy cùng AZWEB khám phá sức mạnh của lệnh ps nhé!
Tổng quan về lệnh ps trong Linux
Để trở thành một người quản trị hệ thống Linux thành thạo, việc nắm vững các công cụ giám sát là điều không thể thiếu. Trong số đó, lệnh ps được xem là một trong những lệnh đầu tiên và quan trọng nhất mà bất kỳ ai cũng cần phải biết. Nó cung cấp cái nhìn sâu sắc vào hoạt động của hệ thống tại một thời điểm cụ thể.
Lệnh ps là gì và mục đích sử dụng
Lệnh ps là viết tắt của “process status” (trạng thái tiến trình). Đúng như tên gọi, mục đích chính của nó là báo cáo một bản tóm tắt (snapshot) về các tiến trình đang hoạt động tại thời điểm lệnh được thực thi. Không giống như các công cụ giám sát thời gian thực như Bash là gì hoặc htop liên tục cập nhật, ps chỉ cung cấp thông tin tại một khoảnh khắc duy nhất.
Vai trò của nó vô cùng quan trọng trong quản trị hệ thống. Bạn sử dụng ps để xem tiến trình nào đang chạy, chúng được khởi chạy bởi người dùng nào, tiêu tốn bao nhiêu tài nguyên CPU và bộ nhớ, và chúng đã chạy trong bao lâu. Đây là bước đầu tiên và cơ bản nhất trong việc chẩn đoán sự cố, theo dõi hiệu suất và đảm bảo an ninh hệ thống.

Cách lệnh ps hoạt động cơ bản
Về cơ bản, lệnh ps lấy thông tin từ một hệ thống file ảo đặc biệt trong Linux gọi là /proc. Thư mục này chứa các tệp và thư mục con không tồn tại trên đĩa cứng vật lý; thay vào đó, nhân Linux tạo ra chúng một cách linh hoạt để cung cấp thông tin về trạng thái của hệ thống, bao gồm cả các tiến trình đang chạy. Khi bạn gõ lệnh ps, nó sẽ đọc dữ liệu từ các tệp trong /proc và định dạng lại để hiển thị cho bạn một cách dễ hiểu.
Khi bạn chạy lệnh ps mà không có bất kỳ tùy chọn nào, nó thường chỉ hiển thị các tiến trình được khởi chạy bởi chính bạn trong phiên terminal hiện tại. Kết quả trả về thường bao gồm bốn cột thông tin chính:
- PID (Process ID): Mã định danh duy nhất cho mỗi tiến trình. Đây là con số quan trọng nhất để bạn tương tác với một tiến trình cụ thể, ví dụ như khi muốn dừng nó.
- TTY (Teletypewriter): Tên của terminal điều khiển mà tiến trình đang gắn vào. Nếu bạn thấy dấu
?, điều đó có nghĩa là tiến trình không được gắn với bất kỳ terminal nào, thường là các dịch vụ hệ thống chạy nền. - TIME: Tổng thời gian CPU mà tiến trình đã sử dụng kể từ khi nó bắt đầu. Đây không phải là thời gian thực tế đã trôi qua.
- CMD (Command): Tên lệnh đã được sử dụng để khởi chạy tiến trình.
Hiểu rõ bốn cột cơ bản này là nền tảng để bạn có thể khám phá các tùy chọn phức tạp và mạnh mẽ hơn của lệnh ps.

Cách liệt kê các tiến trình đang chạy bằng lệnh ps
Sau khi đã hiểu khái niệm cơ bản, chúng ta hãy đi sâu vào cách sử dụng lệnh ps để liệt kê và phân tích các tiến trình đang chạy. Sức mạnh thực sự của ps nằm ở các tùy chọn (flags) đi kèm, cho phép bạn tùy chỉnh đầu ra theo nhu cầu cụ thể.
Sử dụng lệnh ps cơ bản
Cách đơn giản nhất để bắt đầu là gõ lệnh ps trong terminal của bạn. Như đã đề cập, lệnh này sẽ cung cấp một danh sách ngắn gọn các tiến trình thuộc về người dùng hiện tại và đang chạy trên chính terminal đó.
Ví dụ, nếu bạn mở một terminal và chạy lệnh ps, bạn có thể thấy kết quả tương tự như sau:
PID TTY TIME CMD
1234 pts/0 00:00:00 bash
5678 pts/0 00:00:00 ps
Trong ví dụ này, kết quả cho thấy hai tiến trình. Tiến trình bash với PID 1234 chính là trình shell của bạn, nơi bạn đang gõ lệnh. Tiến trình ps với PID 5678 chính là lệnh bạn vừa thực thi. Ngay sau khi hiển thị kết quả, tiến trình ps sẽ kết thúc. Đây là một cách nhanh chóng để kiểm tra xem terminal của bạn đang chạy những gì.
![]()
Các tùy chọn phổ biến của lệnh ps
Để lệnh ps thực sự hữu ích trong quản trị hệ thống, bạn cần sử dụng các tùy chọn để xem tất cả các tiến trình, không chỉ những tiến trình của riêng bạn. Hai cách kết hợp tùy chọn phổ biến nhất là ps aux và ps -ef. Chúng có cú pháp và định dạng đầu ra hơi khác nhau, phục vụ cho các mục đích khác nhau.
Phân tích ps aux (Cú pháp BSD)
Đây là cú pháp rất phổ biến, đặc biệt với những người có nền tảng từ các hệ thống BSD. Cú pháp này không sử dụng dấu gạch ngang (-) trước các tùy chọn.
- a: Hiển thị tiến trình của tất cả người dùng (all users).
- u: Hiển thị thông tin chi tiết theo định hướng người dùng (user-oriented format). Tùy chọn này cung cấp nhiều cột thông tin hữu ích như %CPU, %MEM.
- x: Hiển thị các tiến trình không được gắn với bất kỳ terminal nào. Điều này rất quan trọng để xem các dịch vụ hệ thống và daemon chạy nền.
Khi bạn chạy ps aux, bạn sẽ nhận được một bảng thông tin rất chi tiết với các cột quan trọng như:
- USER: Người dùng sở hữu tiến trình.
- PID: Mã định danh tiến trình.
- %CPU: Tỷ lệ phần trăm CPU mà tiến trình đang sử dụng.
- %MEM: Tỷ lệ phần trăm bộ nhớ (RAM) mà tiến trình đang sử dụng.
- VSZ (Virtual Memory Size): Kích thước bộ nhớ ảo của tiến trình.
- RSS (Resident Set Size): Kích thước bộ nhớ vật lý (RAM) mà tiến trình đang chiếm giữ.
- STAT: Trạng thái của tiến trình (ví dụ: R – running, S – sleeping, Z – zombie).
- START: Thời điểm tiến trình được khởi chạy.
- COMMAND: Toàn bộ lệnh đã khởi chạy tiến trình.
Lệnh ps aux cực kỳ hữu ích khi bạn muốn tìm các tiến trình đang tiêu tốn nhiều tài nguyên nhất hệ thống.

Phân tích ps -ef (Cú pháp POSIX/System V)
Đây là cú pháp chuẩn của POSIX và phổ biến trên các hệ thống System V. Cú pháp này sử dụng dấu gạch ngang (-) trước các tùy chọn.
- -e (every): Hiển thị tất cả mọi tiến trình. Tương đương với
avàxkết hợp. - -f (full): Hiển thị thông tin theo định dạng đầy đủ. Điều đặc biệt của định dạng này là nó cho thấy mối quan hệ cha-con giữa các tiến trình.
Kết quả của ps -ef cũng rất chi tiết nhưng tập trung vào các thông tin khác:
- UID: User ID của người dùng sở hữu tiến trình.
- PID: Mã định danh tiến trình.
- PPID (Parent Process ID): Mã định danh của tiến trình cha đã tạo ra tiến trình này. Đây là thông tin cực kỳ giá trị để truy vết nguồn gốc của một tiến trình.
- C (CPU utilization): Mức sử dụng CPU, nhưng được tính theo một cách khác so với
%CPU. - STIME (Start Time): Thời điểm tiến trình được khởi chạy.
- CMD: Lệnh đã khởi chạy tiến trình.
Lệnh ps -ef là lựa chọn tuyệt vời khi bạn cần phân tích cây tiến trình, tìm hiểu xem tiến trình nào đã sinh ra tiến trình nào, đặc biệt hữu ích khi gỡ lỗi các ứng dụng phức tạp.

So sánh ưu nhược điểm
Không có tùy chọn nào “tốt hơn” tùy chọn nào; chúng chỉ phục vụ cho các mục đích khác nhau.
- Sử dụng
ps auxkhi bạn quan tâm đến việc sử dụng tài nguyên: “Tiến trình nào đang làm máy chủ của tôi chậm lại?”. Các cột%CPUvà%MEMsẽ cho bạn câu trả lời ngay lập tức. - Sử dụng
ps -efkhi bạn quan tâm đến mối quan hệ và nguồn gốc: “Tiến trình này từ đâu mà có? Ai đã khởi chạy nó?”. CộtPPIDlà chìa khóa để trả lời câu hỏi này.
Trong thực tế, các quản trị viên hệ thống thường xuyên sử dụng cả hai lệnh tùy thuộc vào tình huống cụ thể.
Kết hợp lệnh ps với các công cụ khác để quản lý tiến trình
Lệnh ps rất mạnh mẽ khi đứng một mình, nhưng sức mạnh thực sự của nó được bộc lộ khi bạn kết hợp nó với các công cụ dòng lệnh khác của Linux thông qua cơ chế “piping” (dùng dấu |). Piping cho phép bạn lấy đầu ra của một lệnh và dùng nó làm đầu vào cho một lệnh khác, tạo thành một chuỗi xử lý dữ liệu hiệu quả.
Sử dụng ps với grep để tìm tiến trình cụ thể
Một trong những sự kết hợp phổ biến và hữu ích nhất là ps với grep. Khi bạn chạy ps aux hoặc ps -ef, danh sách trả về có thể dài hàng trăm, thậm chí hàng nghìn dòng. Việc tìm kiếm một tiến trình cụ thể trong “biển” thông tin đó bằng mắt thường là không khả thi. Đây là lúc grep phát huy tác dụng.
Lệnh grep được dùng để lọc văn bản, nó sẽ tìm và chỉ hiển thị những dòng chứa một chuỗi ký tự mà bạn chỉ định. Ví dụ, để tìm xem dịch vụ web server Nginx có đang chạy hay không, bạn có thể dùng lệnh:
ps aux | grep nginx
Lệnh này hoạt động như sau:
ps auxthực thi và xuất ra danh sách tất cả tiến trình.- Dấu
|(pipe) chuyển toàn bộ danh sách này làm đầu vào cho lệnhgrep. grep nginxnhận đầu vào và chỉ in ra những dòng nào có chứa từ “nginx”.
Kết quả có thể trông như thế này:
root 1125 0.0 0.1 123456 7890 ? Ss Nov01 0:01 nginx: master process /usr/sbin/nginx
www-data 1128 0.0 0.2 123789 12345 ? S Nov01 0:15 nginx: worker process
azweb 9876 0.0 0.0 6432 680 pts/0 S+ 10:30 0:00 grep --color=auto nginx
Bạn có thể thấy các tiến trình của Nginx. Một lưu ý nhỏ là bạn cũng sẽ thấy chính tiến trình grep nginx trong kết quả. Để loại bỏ dòng này, bạn có thể dùng một mẹo nhỏ là grep '[n]ginx' hoặc dùng thêm một pipe nữa: ps aux | grep nginx | grep -v grep.

Kết hợp ps với các lệnh khác như kill, awk để xử lý tiến trình
Sau khi đã tìm thấy tiến trình mình cần, bước tiếp theo thường là thực hiện một hành động nào đó, ví dụ như dừng một tiến trình bị treo. Lệnh kill được dùng cho mục đích này. Lệnh kill yêu cầu bạn cung cấp PID của tiến trình cần dừng.
Bạn có thể thực hiện theo cách thủ công:
1. Chạy ps aux | grep ten_tien_trinh_bi_treo để tìm PID.
2. Sao chép PID và chạy kill PID_do.
Tuy nhiên, cách này khá chậm và dễ lỗi. Chúng ta có thể tự động hóa quy trình này bằng cách kết hợp thêm awk và xargs. Lệnh awk là một công cụ xử lý văn bản mạnh mẽ, có khả năng trích xuất các cột cụ thể từ đầu vào.
Ví dụ, để tự động tìm và dừng tất cả các tiến trình có tên “bad_app”, bạn có thể sử dụng chuỗi lệnh sau:
ps aux | grep 'bad_app' | grep -v grep | awk '{print $2}' | xargs kill -9
Hãy cùng phân tích chuỗi lệnh phức tạp này:
ps aux | grep 'bad_app' | grep -v grep: Tìm tất cả các dòng chứa “bad_app” và loại bỏ dòng của chính lệnhgrep.awk '{print $2}': Lệnhawknày nhận kết quả từgrepvà chỉ in ra cột thứ hai ($2), chính là cột PID.xargs kill -9: Lệnhxargsnhận danh sách các PID từawkvà thực thi lệnhkill -9cho từng PID đó. Tín hiệu-9(SIGKILL) là tín hiệu mạnh nhất để buộc một tiến trình phải dừng ngay lập tức.
Việc kết hợp các công cụ này cho phép bạn tạo ra các script quản trị hệ thống mạnh mẽ và tự động, tiết kiệm thời gian và giảm thiểu sai sót của con người.

Ứng dụng thực tế của lệnh ps trong quản trị hệ thống Linux
Nắm vững lệnh ps và cách kết hợp nó với các công cụ khác không chỉ là kiến thức lý thuyết. Đây là những kỹ năng được các quản trị viên hệ thống (sysadmin) sử dụng hàng ngày để giữ cho máy chủ hoạt động trơn tru, hiệu quả và an toàn. Hãy cùng xem qua một vài kịch bản thực tế.
Giám sát tiến trình để tối ưu hiệu suất hệ thống
Một trong những phàn nàn phổ biến nhất từ người dùng là “hệ thống bị chậm”. Nguyên nhân gốc rễ thường là do một hoặc vài tiến trình đang chiếm dụng quá nhiều tài nguyên CPU hoặc bộ nhớ RAM. Lệnh ps là công cụ đầu tiên bạn tìm đến để chẩn đoán vấn đề này.
Bằng cách sử dụng lệnh ps aux, bạn có thể nhanh chóng có được cái nhìn tổng quan về việc sử dụng tài nguyên. Các cột %CPU và %MEM là “bạn thân” của bạn trong trường hợp này. Để việc phân tích dễ dàng hơn, bạn có thể sắp xếp kết quả đầu ra. Ví dụ, để tìm 10 tiến trình chiếm nhiều CPU nhất:
ps aux --sort=-%cpu | head -n 11
Và để tìm 10 tiến trình ngốn RAM nhất:
ps aux --sort=-%mem | head -n 11
Khi đã xác định được “thủ phạm”, bạn có thể tiến hành phân tích sâu hơn: đó là tiến trình hệ thống hay ứng dụng của người dùng? Nó có phải là một tiến trình hợp lệ không hay là một script bị lỗi gây ra vòng lặp vô hạn? Từ đó, bạn có thể quyết định dừng tiến trình (kill), khởi động lại dịch vụ, hoặc tối ưu hóa mã nguồn ứng dụng.

Phân tích và xử lý sự cố liên quan đến tiến trình
Khi một ứng dụng không phản hồi hoặc một dịch vụ không hoạt động như mong đợi, lệnh ps lại một lần nữa trở thành công cụ cứu cánh. Nó giúp bạn xác định trạng thái của các tiến trình liên quan và tìm ra manh mối của sự cố.
Một ví dụ điển hình là xử lý các tiến trình “zombie” (xác sống). Một tiến trình zombie là tiến trình con đã hoàn thành công việc và thoát, nhưng tiến trình cha của nó chưa đọc trạng thái kết thúc của nó. Mặc dù các tiến trình zombie không sử dụng tài nguyên CPU, nhưng sự tồn tại của quá nhiều tiến trình zombie có thể làm cạn kiệt bảng tiến trình của hệ thống, ngăn cản việc tạo ra các tiến trình mới.
Bạn có thể tìm các tiến trình zombie bằng cách kiểm tra cột STAT trong đầu ra của ps aux. Các tiến trình zombie sẽ có trạng thái là Z.
ps aux | awk '$8=="Z"'
Khi đã tìm thấy một tiến trình zombie, bạn không thể kill trực tiếp nó. Thay vào đó, bạn cần tìm ra tiến trình cha của nó bằng cách sử dụng cột PPID từ lệnh ps -ef và sau đó kill hoặc khởi động lại tiến trình cha đó. Điều này sẽ cho phép tiến trình cha “thu dọn” các tiến trình con zombie của mình. Đây là một ví dụ kinh điển về việc sử dụng ps để chẩn đoán và giải quyết các vấn đề phức tạp trong hệ thống.

Lời khuyên và các lưu ý khi sử dụng lệnh ps
Sử dụng thành thạo lệnh ps đòi hỏi sự thực hành và một vài lưu ý để tránh các sai sót phổ biến. Dưới đây là những mẹo và cảnh báo từ AZWEB để giúp bạn khai thác tối đa công cụ này một cách an toàn và hiệu quả.
Những điều nên làm
- Đọc tài liệu hướng dẫn (man page): Lệnh
pscó vô số tùy chọn. Cách tốt nhất để khám phá tất cả chúng là đọc tài liệu hướng dẫn bằng lệnhman ps. Bạn sẽ ngạc nhiên về những khả năng tùy chỉnh mà nó cung cấp. - Tạo bí danh (alias): Nếu bạn thường xuyên sử dụng một chuỗi lệnh
psphức tạp, hãy tạo một bí danh (alias) trong tệp.bashrchoặc.zshrccủa bạn. Ví dụ, bạn có thể tạo bí danhpscpucho lệnhps aux --sort=-%cpu | head -n 11. Điều này giúp tiết kiệm thời gian và giảm lỗi gõ phím. - Luôn kết hợp với các công cụ khác: Đừng chỉ dừng lại ở
ps. Hãy coi nó là điểm khởi đầu. Kết hợp nó vớigrep,awk,sort,head,tail, vàxargsđể tạo ra các quy trình làm việc mạnh mẽ. Sức mạnh của dòng lệnh Linux Bash nằm ở khả năng kết hợp các công cụ nhỏ để giải quyết các vấn đề lớn. - Cập nhật kiến thức: Các phiên bản mới của
procps(gói chứa lệnhps) có thể giới thiệu các tùy chọn mới hoặc thay đổi hành vi của các tùy chọn cũ. Thỉnh thoảng hãy xem lại tài liệu để cập nhật những thay đổi này.
Các lưu ý tránh nhầm lẫn và sai sót
- Không nhầm lẫn giữa cú pháp BSD và POSIX: Một trong những lỗi phổ biến nhất là nhầm lẫn giữa
ps aux(BSD, không có gạch ngang) vàps -ef(POSIX, có gạch ngang). Chúng cung cấp các cột thông tin khác nhau và dùng cho các mục đích khác nhau. Hãy hiểu rõ bạn cần thông tin gì để chọn đúng cú pháp. - Cẩn thận khi sử dụng
kill: Khi kết hợppsvớikill, đặc biệt làkill -9, hãy hết sức cẩn thận. Hãy chắc chắn rằng bạn đang nhắm đúng PID. Việc dừng nhầm một tiến trình hệ thống quan trọng có thể gây ra sự cố cho toàn bộ máy chủ. Luôn kiểm tra kỹ lựa chọn lần trước khi thực thi lệnhkill. - Chú ý đến quyền truy cập: Nếu bạn đang chạy
psvới tư cách là một người dùng thông thường, bạn có thể không thấy được tất cả thông tin chi tiết về các tiến trình thuộc sở hữu của người dùng khác hoặc củaroot. Để có cái nhìn toàn cảnh và đầy đủ nhất về hệ thống, hãy sử dụngsudo ps auxhoặcsudo ps -ef. - Hiểu rằng
pschỉ là một “snapshot”: Hãy nhớ rằngpschỉ cho bạn thấy trạng thái tại một thời điểm. Một tiến trình có thể đang sử dụng 90% CPU tại một khoảnh khắc nhưng lại không hoạt động ngay sau đó. Đối với việc giám sát liên tục, các công cụ như top,htop, hoặc các giải pháp giám sát chuyên nghiệp sẽ phù hợp hơn.
Kết luận
Qua bài viết này, chúng ta đã cùng nhau khám phá sâu về lệnh ps, một công cụ không thể thiếu trong bộ công cụ của bất kỳ ai làm việc với Linux. Từ việc hiểu định nghĩa cơ bản, cách hoạt động, cho đến việc sử dụng các tùy chọn mạnh mẽ như ps aux và ps -ef, bạn đã có một nền tảng vững chắc để bắt đầu giám sát và quản lý các tiến trình trên hệ thống của mình.
Vai trò của lệnh ps vượt xa việc chỉ liệt kê các tiến trình. Nó là cửa ngõ để chẩn đoán sự cố hiệu suất, gỡ lỗi ứng dụng và đảm bảo an ninh hệ thống. Khả năng kết hợp ps với các công cụ dòng lệnh khác như grep, awk và kill mở ra một thế giới tự động hóa, giúp công việc quản trị trở nên hiệu quả và chính xác hơn rất nhiều. Như AZWEB luôn nhấn mạnh, việc nắm vững các công cụ cơ bản chính là chìa khóa để xây dựng và duy trì những hệ thống web mạnh mẽ và ổn định.
Đừng ngần ngại mở terminal và thực hành ngay những gì bạn đã học. Càng sử dụng thường xuyên, bạn sẽ càng trở nên thành thạo. Sau khi đã tự tin với ps, chúng tôi khuyến khích bạn tiếp tục tìm hiểu các lệnh quản trị liên quan như top và htop để có khả năng giám sát hệ thống theo thời gian thực, hoàn thiện hơn nữa kỹ năng quản trị Linux của mình.