Khi sử dụng hệ điều hành Linux, chắc hẳn mọi người đều đã biết đến câu lệnh ps. Bài viết này mình sẽ tập trung giới thiệu với mọi người thêm về câu lệnh này cũng như là các trường thông tin mà câu lện này cung cấp.

Mục lục

  1. Tổng quan
  2. Cách sử dụng
  3. Ý nghĩa một số trường thông tin
  4. Lệnh pstree
  5. Trạng thái của một tiến trình
  6. Tài liệu tham khảo

1. Tổng quan

ps (hay Process Status) là một tiện ích của Unix/Linux dùng để xem thông tin của các tiến trình đang chạy trong hệ thống. Đây có thể nói là một tiện ích quan trọng giúp bạn hiểu chuyện gì đang diễn ra trên hệ thống của bạn.

Tiện ích ps sẽ đọc thông tin tiến trình từ một file ảo nằm trong thư mục /proc. Nó sẽ cung cấp một số tuỳ chọn để cho bạn dễ dàng xem thông tin của các tiến trình. Trong bài này mình sẽ giới thiệu một vài câu lệnh phổ biến.

2. Cách sử dụng

Về cơ bản cấu trúc của câu lệnh sẽ là:

ps [option]

Lưu ý: bạn có thể xem qua các option bằng lệnh man ps

Ví dụ 1: Để xem thông tin shell hiện tại, gõ:

ps
image

Trong bảng này, ta sẽ thấy các thông tin sau:

MụcÝ nghĩa
PIDId của tiến trình
TTYThông tin terminal mà người dùng đăng nhập
TIMELượng CPU tính bằng phút giây mà tiến trình đó chạy
CMDCâu lệnh để thực hiện process đó

Lưu ý: Một số tiến trình ghi TIME là 00:00:00 (như trong ví dụ) thì các tiến trình đó không sử dụng bất cứ thời gian CPU nào. Thường đó sẽ là tiến trình cha (Parent process), các tiến trình con sẽ sử dụng nó để thực thi.

Ví dụ 2: Xem thông tin đầy đủ của tiến trình

Ta có thể xem thông tin của tiến trình theo cú pháp tiêu chuẩn hoặc cú pháp BSD.

  • Theo cú pháp tiêu chuẩn:
ps -ef
ps -eF
ps -ely
image
image
  • Theo cú pháp BSD:
ps ax
ps aux
image

Lưu ý: một số trường mình sẽ giải thích cụ thể bên dưới.

Ví dụ 3: in các tiến trình theo dạng cây phân cấp.

Vì các tiến trình được phân cấp theo cha – con nên ta có thể theo dõi thông tin đó theo câu lệnh sau:

ps -ejH
ps axjf
image

Ví dụ 4: Hiển thị thông tin về luồng (Thread)

Ngoài thông tin về tiến trình, bạn có thể xem các thông tin về luồng bằng câu lệnh:

ps -eLf
ps axms
image

Ví dụ 5: để xem thông tin tiến trình thuộc nhóm người dùng nhất định.

Ta dùng lệnh như sau:

ps -fG [tên user]
image

Ví dụ 6: In ra thông tin tiến trình chạy dưới quyền root.

Ta dùng câu lệnh:

ps -U root -u root u
image

Ví dụ 7: In ra thông tin theo một số trường cụ thể.

Ngoài những thông tin có sẵn của các option (tuỳ chọn), ta có thể thêm một số trường thông tin khác để đưa ra ngoài bằng tuỳ chọn -o. Ví dụ, ta muốn xem thông tin pid, ppid, cmd, %mem, %cpu của tất cả các tiến trình đang chạy bằng lệnh:

ps -eo pid,ppid,cmd,%mem,%cpu
image

3. Ý nghĩa một số trường thông tin

TrườngÝ nghĩa
CMDCâu lệnh thực thi tiến trình
%CPULượng cpu sử dụng
%MEMLượng Ram tiêu thụ
PIDMã tiến trình
PPIDMã của tiến trình cha
UIDmã người dùng
USERTên người dùng
PRIđộ ưu tiên của tiến trình
RSSLượng bộ nhớ sử dụng thực
VSZ or SZLượng bộ nhớ ảo sử dụng
S or STATChứa đoạn mã code mô tả trạng thái của tiến trình
Start or STIMEThời gian mà câu lệnh đó khởi động. Nhỏ hơn 24h là “HH:MM:SS”, lớn hơn là “Mmm dd”
TTYTerminal liên quan tới tiến trình

4. Lệnh pstree

Ngoài lệnh ps ta cũng có thể sủ dụng lệnh pstree. Lệnh này còn giúp ta nhìn cấu trúc cây phân cấp của tiến trình một các dễ dàng.

Cú pháp câu lệnh:

pstree [option]

Lưu ý: Ở một số hệ điều hành, tiện ích này không có sẵn. Tiến hành cài đặt nó:

# Trên Fedora/Red Hat/CentOS
sudo yum -y install psmisc

#Trên Ubuntu/Debian APT
sudo apt-get -y install psmisc

Ví dụ 1: Xem thông tin tiến trình hiện tại

Lệnh:

pstree
image

Ví dụ 2: Xem tiến trình cùng với PID của nó.

Lệnh:

pstree -p
image

Ví dụ 3: Xem tiến trình cùng với câu lệnh của nó

Lệnh:

pstree -a
image

Ví dụ 4: Xem tiến trình cụ thể với highlight

Lệnh:

pstree -H [PID]]
image

Ví dụ 5: Xem cây tiến trình theo thứ tự PID

Kết hợp với tuỳ chọn -p để xem PID của tiến trình:

pstree -np
image

Ví dụ 6: Xem các tiến trình theo cây thuộc người dùng nào đó

Lệnh:

pstree [Tên người dùng]
image

5. Trạng thái của một tiến trình

Khi sử dụng lệnh ps, ta có thể xem được trạng thái của tiến trình đó là gì, thông qua trường STAT theo kí hiệu như sau:

Kí hiệuGiải thích
DTiến trình ngủ liên tục (Uninterruptible)
RTiến trình đang sẵn sàng hoặc đang chạy
STiến trình ngủ ngắt quãng (Interruptible)
TĐã bị dừng bởi tín hiệu kiểm soát hoặc bị theo dõi
WPhân trang (không có sẵn sau bản kernel 2.6.xx))
XDead (ít gặp)
ZZombie process

Một số kí tự đi kèm:

Kí hiệuGiải thích
<Ưu tiên cao
NƯu tiên thấp
Lcó trang bị khoá trong bộ nhớ (do thời gian thực hoặc IO)
sSession leader
|Tiến trình đa luồng (CLONE_THREAD)
+Tiến trình thuộc nhóm Foreground
image

Mô hình hoạt động:

Một tiến trình sẽ bắt đầu chu trình bằng trạng thái ‘R’ và sẽ bị kết thúc khi tiến trình cha đưa nó về trang thái ‘Z’.

6. Tài liệu tham khảo

  1. Câu lệnh ps
  2. Câu lệnh pstree
  3. Tài liệu tiếng việt về ps command
  4. Process status code