Lệnh ps (Process Status) trong Linux được dùng để hiển thị thông tin về các tiến trình (process) đang hoạt động trên hệ thống. Đây là một công cụ dòng lệnh cơ bản nhưng rất mạnh mẽ, cho phép bạn xem trạng thái, PID, mức sử dụng tài nguyên, và mối quan hệ giữa các tiến trình.
Cú pháp cơ bản:
ps [tùy_chọn]
Nếu bạn muốn theo dõi thời gian thực, hãy dùng lệnh top. Lệnh ps thường được kết hợp với kill để dừng các tiến trình không mong muốn.
Các tùy chọn thường gặp
-Ahoặc-e: Hiển thị tất cả các tiến trình.-f: Định dạng đầy đủ (bao gồm thêm thông tin).-u userlist: Hiển thị tiến trình của một hoặc nhiều người dùng cụ thể.u: Định dạng dựa trên người dùng.a: Hiển thị tất cả tiến trình có gắn với terminal (TTY). Khi kết hợp vớix, hiển thị mọi tiến trình.x: Hiển thị tiến trình thuộc người dùng hiện tại hoặc tất cả (khi kết hợp vớia).-H: Hiển thị cấu trúc phân cấp (dạng cây).-jhoặcj: Định dạng công việc (job format).
Hai cách dùng phổ biến nhất là ps aux (định dạng BSD) và ps -ef (định dạng chuẩn).
Ví dụ thực tế
1) Hiển thị tất cả tiến trình
[root@CentOS6 ~]# ps -e | head -20
PID TTY TIME CMD
1 ? 00:00:02 init
2 ? 00:00:00 kthreadd
3 ? 00:00:00 migration/0
4 ? 00:00:00 ksoftirqd/0
5 ? 00:00:00 stopper/0
6 ? 00:00:00 watchdog/0
7 ? 00:00:00 migration/1
8 ? 00:00:00 stopper/1
9 ? 00:00:00 ksoftirqd/1
10 ? 00:00:00 watchdog/1
11 ? 00:00:00 events/0
12 ? 00:00:00 events/1
13 ? 00:00:00 events/0
14 ? 00:00:00 events/1
15 ? 00:00:00 events_long/0
16 ? 00:00:00 events_long/1
17 ? 00:00:00 events_power_ef
18 ? 00:00:00 events_power_ef
19 ? 00:00:00 cgroup
...
2) Lọc tiến trình của người dùng cụ thể
[root@CentOS6 ~]# ps -u root | head -10
PID TTY TIME CMD
1 ? 00:00:02 init
2 ? 00:00:00 kthreadd
3 ? 00:00:00 migration/0
4 ? 00:00:00 ksoftirqd/0
5 ? 00:00:00 stopper/0
6 ? 00:00:00 watchdog/0
7 ? 00:00:00 migration/1
8 ? 00:00:00 stopper/1
9 ? 00:00:00 ksoftirqd/1
3) So sánh ps a và ps -a
[root@CentOS6 ~]# ps a
PID TTY STAT TIME COMMAND
2013 tty2 Ss+ 0:00 /sbin/mingetty /dev/tty2
2020 tty3 Ss+ 0:00 /sbin/mingetty /dev/tty3
2030 tty4 Ss+ 0:00 /sbin/mingetty /dev/tty4
2033 tty5 Ss+ 0:00 /sbin/mingetty /dev/tty5
2035 tty6 Ss+ 0:00 /sbin/mingetty /dev/tty6
2053 tty1 Ssl+ 2:26 /usr/bin/Xorg :0 ...
4428 pts/1 Ss 0:00 /bin/bash
4438 pts/1 T 0:00 more -10
4449 pts/1 R+ 0:00 ps a
[root@CentOS6 ~]# ps -a
PID TTY TIME CMD
4438 pts/1 00:00:00 more
4450 pts/1 00:00:00 ps
4) Hiển thị đầy đủ thông tin (bao gồm dòng lệnh)
[root@CentOS6 ~]# ps -ef | head -15
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 14:10 ? 00:00:02 /sbin/init
root 2 0 0 14:10 ? 00:00:00 [kthreadd]
root 3 2 0 14:10 ? 00:00:00 [migration/0]
root 4 2 0 14:10 ? 00:00:00 [ksoftirqd/0]
root 5 2 0 14:10 ? 00:00:00 [stopper/0]
root 6 2 0 14:10 ? 00:00:00 [watchdog/0]
root 7 2 0 14:10 ? 00:00:00 [migration/1]
root 8 2 0 14:10 ? 00:00:00 [stopper/1]
root 9 2 0 14:10 ? 00:00:00 [ksoftirqd/1]
root 10 2 0 14:10 ? 00:00:00 [watchdog/1]
...
Giải thích cột:
UID: Người dùng sở hữu tiến trình.PID: ID tiến trình.PPID: ID tiến trình cha.C: Tỷ lệ sử dụng CPU.STIME: Thời gian khởi động tiến trình.TTY: Terminal liên kết (dấu?nghĩa là không có terminal).TIME: Tổng thời gian CPU đã dùng.CMD: Lệnh đã thực thi.
5) Kết hợp ps với grep để tìm tiến trình
[root@CentOS6 ~]# ps -ef | grep ksoftirqd/0
root 4 2 0 14:10 ? 00:00:00 [ksoftirqd/0]
root 4534 4484 0 18:54 pts/0 00:00:00 grep ksoftirqd/0
6) Xem tiến trình thuộc phiên đăng nhập hiện tại
[root@CentOS6 ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 4568 4566 0 80 0 - 27087 wait pts/0 00:00:00 bash
4 R 0 4578 4568 0 80 0 - 27035 - pts/0 00:00:00 ps
Chú thích cột bổ sung:
S: Trạng thái (R=đang chạy, S=ngủ, T=dừng, Z=zombie).PRIvàNI: Mức ưu tiên.ADDR: Địa chỉ bộ nhớ.SZ: Kích thước bộ nhớ ảo.WCHAN: Kernel function đang chờ (nếu có).
7) Hiển thị cấu trúc cây giữa các tiến trình
[root@CentOS6 ~]# ps f
PID TTY STAT TIME COMMAND
4568 pts/0 Ss 0:00 /bin/bash
4630 pts/0 R+ 0:00 \_ ps f
2053 tty1 Ssl+ 2:48 /usr/bin/Xorg :0 ...
2035 tty6 Ss+ 0:00 /sbin/mingetty /dev/tty6
2033 tty5 Ss+ 0:00 /sbin/mingetty /dev/tty5
2030 tty4 Ss+ 0:00 /sbin/mingetty /dev/tty4
2020 tty3 Ss+ 0:00 /sbin/mingetty /dev/tty3
2013 tty2 Ss+ 0:00 /sbin/mingetty /dev/tty2
8) Liệt kê tất cả tiến trình trong bộ nhớ (định dạng BSD)
[root@CentOS6 ~]# ps aux | head -15
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 19352 1552 ? Ss 14:10 0:02 /sbin/init
root 2 0.0 0.0 0 0 ? S 14:10 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 14:10 0:00 [migration/0]
root 4 0.0 0.0 0 0 ? S 14:10 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S 14:10 0:00 [stopper/0]
root 6 0.0 0.0 0 0 ? S 14:10 0:00 [watchdog/0]
root 7 0.0 0.0 0 0 ? S 14:10 0:00 [migration/1]
root 8 0.0 0.0 0 0 ? S 14:10 0:00 [stopper/1]
root 9 0.0 0.0 0 0 ? S 14:10 0:00 [ksoftirqd/1]
...
Giải thích cột bổ sung:
%CPU: Phần trăm CPU sử dụng.%MEM: Phần trăm bộ nhớ vật lý.VSZ: Bộ nhớ ảo (KB).RSS: Bộ nhớ thường trú (KB).STAT: Trạng thái với các ký hiệu mở rộng:<(ưu tiên cao),N(ưu tiên thấp),L(có trang bộ nhớ bị khóa),s(tiến trình điều khiển phiên),l(đa luồng),+(ở nền trước).START: Thời điểm tiến trình được khởi tạo.
9) Hiển thị cây tiến trình với PID và mối quan hệ
[root@CentOS6 ~]# ps -axjf | head -15
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
0 2 0 0 ? -1 S 0 0:00 [kthreadd]
2 3 0 0 ? -1 S 0 0:00 \_ [migration/0]
2 4 0 0 ? -1 S 0 0:00 \_ [ksoftirqd/0]
2 5 0 0 ? -1 S 0 0:00 \_ [stopper/0]
2 6 0 0 ? -1 S 0 0:00 \_ [watchdog/0]
2 7 0 0 ? -1 S 0 0:00 \_ [migration/1]
2 8 0 0 ? -1 S 0 0:00 \_ [stopper/1]
2 9 0 0 ? -1 S 0 0:00 \_ [ksoftirqd/1]
...
Kiến thức nâng cao
Vòng đời của tiến trình
Tiến trình cha tạo ra tiến trình con bằng lệnh fork(). Mỗi tiến trình có một ID duy nhất (PID). Tiến trình gốc (PID=1) là init trên CentOS 5/6 hoặc systemd trên CentOS 7 trở lên.
Zombie process là gì?
Khi tiến trình con kết thúc nhưng tiến trình cha chưa gọi wait() để dọn dẹp, trạng thái của con vẫn tồn tại trong bảng tiến trình. Đó gọi là zombie process. Nếu cha thoát trước con, những con không có cha quản lý sẽ trở thành zombie.
Các thuộc tính của tiến trình
- PID: ID duy nhất.
- PPID: ID của tiến trình cha.
- UID/GID: Người dùng và nhóm sở hữu.
- Trạng thái: R (đang chạy), S (ngủ), Z (zombie), D (không ngắt được), T (dừng).
- Mức ưu tiên: Thể hiện qua giá trị
PRIvàNI. - Tài nguyên: CPU, bộ nhớ, thời gian sử dụng.
Lệnh bổ trợ: pstree
pstree hiển thị tiến trình dưới dạng cây. Mặc định, nó gộp các tiến trình cùng tên.
Ví dụ không có tham số
[xf@xuexi ~]$ pstree | head -10
systemd-+-ModemManager---2*[{ModemManager}]
|-NetworkManager-+-dhclient
| `-2*[{NetworkManager}]
|-VGAuthService
|-abrt-dbus---2*[{abrt-dbus}]
...
Ví dụ hiển thị PID
[xf@xuexi ~]$ pstree -p | head -10
systemd(1)-+-ModemManager(6833)-+-{ModemManager}(6858)
| `-{ModemManager}(6877)
|-NetworkManager(6988)-+-dhclient(7291)
| |-{NetworkManager}(6995)
| `-{NetworkManager}(6998)
|-VGAuthService(6831)
...