Lệnh ps được dùng để hiển thị trạng thái hiện tại của các tiến trình đang chạy trên hệ thống.
ps -ef
# Hiển thị thông tin chi tiết của tất cả tiến trình
# -e: liệt kê mọi tiến trình
# -f: xuất ra định dạng đầy đủ gồm UID, PID, PPID, C, STIME, TTY, TIME, CMD
ps ef
# e: hiển thị biến môi trường của từng tiến trình
# f: biểu diễn mối quan hệ giữa các tiến trình dưới dạng cây ASCII
ps aux
# a: hiển thị tiến trình từ mọi terminal
# u: định dạng theo người dùng
# x: bao gồm cả những tiến trình không gắn với terminal
# Định dạng đầu ra:
# USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
# root 1 0.0 0.1 191196 4116 ? Ss Dec19 0:14 /usr/lib/systemd/systemd --switched-root ...
Giải thích các cột:
- USER: chủ sở hữu tiến trình
- PID: ID tiến trình
- %CPU: tỷ lệ CPU đang sử dụng
- %MEM: tỷ lệ bộ nhớ đang sử dụng
- VSZ: kích thước bộ nhớ ảo (KB)
- RSS: bộ nhớ vật lý đang chiếm dụng (KB)
- TTY: thiết bị terminal liên kết
- STAT: trạng thái tiến trình
Một số ký hiệu trạng thái phổ biến:
- S: ngủ (có thể đánh thức)
- s: tiến trình cha có con
- R: đang chạy
- D: ngủ không gián đoạn
- T: đã dừng
- Z: zombie (tiến trình con đã kết thúc nhưng cha chưa thu dọn)
- +: tiến trình nền trước (foreground)
- N: độ ưu tiên thấp
- <: độ ưu tiên cao
- L: tiến trình bị khóa vào bộ nhớ
ps -u bruce
# Liệt kê tất cả tiến trình thuộc về người dùng 'bruce'
pstree
# Hiển thị cấu trúc phân cấp tiến trình dạng cây
# Trên CentOS/RHEL, cần cài đặt: yum install -y psmisc
pgrep ssh
# Tìm và in ra PID của các tiến trình có tên chứa 'ssh'
Lệnh kill dùng để gửi tín hiệu điều khiển tới một tiến trình.
kill -l
# Liệt kê tất cả tín hiệu hệ thống hỗ trợ
Một số tín hiệu phổ biến:
- SIGHUP (1): treo tiến trình (thường xảy ra khi mất kết nối terminal)
- SIGINT (2): ngắt – thường do Ctrl+C
- SIGQUIT (3): thoát – thường do Ctrl+\
- SIGTERM (15): yêu cầu kết thúc – tín hiệu mặc định của
kill - SIGKILL (9): buộc chấm dứt ngay lập tức
- SIGTSTP (20): tạm dừng – thường do Ctrl+Z
kill -9 1234 # Gửi SIGKILL để buộc kết thúc tiến trình PID 1234
kill 1234 # Gửi SIGTERM (mặc định) để yêu cầu tiến trình tự kết thúc
kill -0 $pid # Không gửi tín hiệu, chỉ kiểm tra xem PID có tồn tại không
echo $? # In mã trả về: 0 nếu tồn tại, 1 nếu không
Các lệnh mở rộng:
killall vim
# Kết thúc tất cả tiến trình có tên chính xác là 'vim'
pkill firefox
# Kết thúc mọi tiến trình có tên chứa 'firefox', bao gồm cả tiến trình con
Khác với killall, pkill sử dụng khớp mẫu linh hoạt hơn và có khả năng xử lý toàn bộ cây tiến trình con từ tiến trình gốc.