Khi làm việc, đôi khi các chương trình đột ngột bị treo. Lúc khác, chúng vẫn chạy nhưng tiêu tốn quá nhiều CPU hoặc bộ nhớ. Linux cung cấp giải pháp thông qua lệnh ps (Process Status). Bài viết này hướng dẫn cách dùng lệnh ps để liệt kê các tiến trình đang chạy cùng PID, từ đó tìm và kill các tiến trình đang ngốn tài nguyên.
Sử dụng lệnh "ps"
Lệnh ps có thể dùng độc lập. Nó hiển thị 4 cột thông tin:
- PID: định danh duy nhất của tiến trình do hệ thống cấp. Đây là giá trị dùng để dừng tiến trình.
- TTY: terminal khởi động tiến trình.
- TIME: tổng thời gian CPU đã dùng cho tiến trình.
- CMD: lệnh tạo ra tiến trình
Lưu ý: dùng lệnh không kèm tùy chọn sẽ hiển thị ít thông tin. Dưới đây là các cách làm cho nó hữu ích hơn.
1. Liệt kê tiến trình của tất cả user
Khi cài đặt phần mềm, đôi khi tạo thêm user để chạy tiến trình. Để liệt kê tiến trình của các user, dùng tùy chọn -e:
ps -e
Kết quả mẫu:
PID TTY TIME CMD 1 ? 00:00:02 systemd 2 ? 00:00:00 kthreadd 3 ? 00:00:00 kworker/0:0 4 ? 00:00:00 kworker/0:0H 5 ? 00:00:00 kworker/u256:0 6 ? 00:00:00 mm_percpu_wq
2. Liệt kê tiến trình với nhiều thông tin hơn
Để có thêm thông tin, dùng tùy chọn ef:
ps -ef
Kết quả mẫu:
UID PID PPID C STIME TTY TIME CMD root 1 0 0 21:34 ? 00:00:03 /sbin/init maybe-ubiquity root 2 0 0 21:34 ? 00:00:00 [kthreadd] root 3 2 0 21:34 ? 00:00:00 [kworker/0:0] root 4 2 0 21:34 ? 00:00:00 [kworker/0:0H] root 6 2 0 21:34 ? 00:00:00 [mm_percpu_wq] root 7 2 0 21:34 ? 00:00:00 [ksoftirqd/0]
3. Lọc tiến trình theo PID
Nếu biết PID của tiến trình cần xem, dùng cờ -p. Có thể truyền nhiều PID, cách nhau bởi dấu phẩy không khoảng trắng:
ps -ef -p 1234,5678,9012
4. Liệt kê tiến trình thuộc sở hữu của một user
Dùng tùy chọn u kèm tên user:
ps -u tenUser
Kết quả mẫu:
PID TTY TIME CMD 2832 ? 00:00:00 systemd 2842 ? 00:00:00 (sd-pam) 3043 ? 00:00:00 sshd 3044 pts/1 00:00:00 bash 18396 pts/1 00:00:00 ps
5. Liệt kê các tiến trình đang hoạt động
Dùng tùy chọn ax:
ps -ax
Kết quả mẫu:
PID TTY STAT TIME COMMAND 1 ? Ss 0:02 /sbin/init maybe-ubiquity 2 ? S 0:00 [kthreadd] 3 ? I 0:00 [kworker/0:0] 4 ? I< 0:00 [kworker/0:0H] 6 ? I< 0:00 [mm_percpu_wq] 7 ? S 0:00 [ksoftirqd/0]
6. Liệt kê tiến trình hoạt động kèm user
Thêm cờ -aux:
ps -aux
Kết quả mẫu:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.2 78132 9188 ? Ss 21:34 0:02 /sbin/init maybe-ubiquity root 2 0.0 0.0 0 0 ? S 21:34 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? I 21:34 0:00 [kworker/0:0] root 4 0.0 0.0 0 0 ? I< 21:34 0:00 [kworker/0:0H] root 6 0.0 0.0 0 0 ? I< 21:34 0:00 [mm_percpu_wq] root 7 0.0 0.0 0 0 ? S 21:34 0:00 [ksoftirqd/0] root 8 0.0 0.0 0 0 ? I 21:34 0:00 [rcu_sched] root 9 0.0 0.0 0 0 ? I 21:34 0:00 [rcu_bh] root 10 0.0 0.0 0 0 ? S 21:34 0:00 [migration/0]
7. Lọc tiến trình theo tên chương trình
Lọc kết quả ps bằng grep:
ps -aux | grep docker
Kết quả mẫu:
root 1508 0.0 2.2 1518156 90868 ? Ssl 21:34 0:03 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock userkub+ 18429 0.0 0.0 13144 1108 pts/1 S+ 23:57 0:00 grep --color=auto docker
Hoặc dùng tùy chọn C để lọc theo tên:
ps -C ten
8. Hiển thị các cột cụ thể
Ngoài 4 cột mặc định, có thể thêm cột thông tin với cờ -o:
ps -e -o pid,uname,pcpu,pmem,comm
Cờ -o thiết lập tùy chọn hiển thị đầu ra cho lệnh ps. Xem danh sách đầy đủ các tùy chọn hiển thị chuẩn.
9. Hiển thị kết quả dạng cây phân cấp
ps -e --forest
Sử dụng ASCII art tạo cấu trúc dạng cây cho tiến trình. Hiển thị tiến trình con/fork như hậu duệ của tiến trình cha, sắp xếp phù hợp. Để ẩn "nhánh" cây, dùng -H thay vì --forest.
10. Hiển thị luồng (thread) của tiến trình
ps -p 4041 -L
Cờ -L bật chế độ hiển thị luồng cho mọi chức năng của ps. Hữu ích nhất khi truy tìm các luồng của một tiến trình cụ thể.
11. Hiển thị tất cả tiến trình root
ps -f -U root -u root
Tìm kiếm tất cả tiến trình chạy với ID root thật và hiệu lực. Hiển thị định dạng đầy đủ nhờ cờ -f. Có thể kết hợp với cờ -o để tùy chỉnh đầu ra.
Dùng lệnh kill để dừng tiến trình
Sau khi xác định tiến trình gây sự cố, dùng lệnh kill để kết thúc nó. Lệnh gửi tín hiệu chấm dứt tiến trình. Khi chương trình treo, thường cần kill mạnh với tùy chọn -9.
Đầu ra của ps là cái nhìn tức thời. Khác với htop, nó không tự cập nhật động. Do đó, có thể phải chạy nhiều lần để nắm rõ tiến trình nào đang gây sự cố. Để có cái nhìn cập nhật, hãy thử các lệnh khác cho hệ thống Linux.