hoatranlab.io.vn Zalo: 0917516878 Hotline: 0917516878 [email protected]
HoaTranLab Logo HoaTranLab
Linux Bible 11th Edition • Chapter 6

Managing Running Processes

Learn to view, control, and prioritize Linux processes using ps, top, kill, nice, renice, and cgroups — essential skills for every system administrator.

Mục tiêu chương

Sau khi hoàn thành chương này, bạn sẽ có thể:

Liệt kê tiến trình

Sử dụng lệnh pstop để xem tất cả tiến trình đang chạy, bao gồm PID, CPU, bộ nhớ và trạng thái.

Foreground & Background

Chuyển tiến trình giữa foreground và background bằng fg, bg, jobs.

Kill tiến trình

Gửi tín hiệu đến tiến trình bằng killkillall; hiểu SIGTERM, SIGKILL, SIGHUP.

Ưu tiên CPU (nice/renice)

Điều chỉnh mức ưu tiên CPU của tiến trình từ -20 đến 19 bằng lệnh nicerenice.

Giám sát đồ họa

Dùng GNOME System Monitor để xem, tạm dừng, kill hoặc renice tiến trình qua GUI.

Cgroups v2

Hiểu cơ chế cgroups v2 để giới hạn tài nguyên (CPU, RAM, IO) cho nhóm tiến trình — nền tảng của containers và cloud.

Lý thuyết chi tiết

Các khái niệm và lệnh quan trọng trong chương 6

Lệnh ps — Xem tiến trình

Lệnh ps liệt kê các tiến trình đang chạy. Mỗi tiến trình có PID duy nhất. Cột STAT: R (running), S (sleeping), s (session leader). VSZ = bộ nhớ ảo cấp phát; RSS = bộ nhớ vật lý đang dùng thực sự.

Terminal

$ ps u

USER PID %CPU %MEM VSZ RSS TTY STAT TIME COMMAND

jake 1234 0.0 0.1 12345 2048 pts/2 Ss 0:00 bash

jake 5678 0.0 0.0 9876 956 pts/2 R+ 0:00 ps u

$ ps aux | less

# Xem tat ca tien trinh moi user

$ ps -eo pid,user,group,vsz,rss,comm --sort=-vsz | head

PID USER GROUP VSZ RSS COMMAND

5219 chris chris 12763828 572024 firefox

3841 chris chris 4768392 298668 gnome-shell

Lệnh top — Giám sát thời gian thực

Lệnh top hiển thị tiến trình theo thời gian thực, tự động cập nhật mỗi 5 giây. Phần đầu: uptime, users, load average, CPU, RAM, swap. Phần dưới: danh sách tiến trình sắp xếp theo %CPU.

Phím tắt trong top

  • h — Help
  • M — Sort theo RAM
  • P — Sort theo CPU
  • 1 — Hiển từng CPU core
  • R — Đảo chiều sort
  • u — Lọc theo user
  • k — Kill tiến trình
  • r — Renice tiến trình
  • q — Thoát
top output

$ top

top - 10:25 up 2:15, 2 users, load: 0.15

Tasks: 185 total, 1 running, 184 sleeping

%Cpu(s): 2.3us, 0.7sy, 96.8id

MiB Mem: 15933 total, 9234 free

PID USER PR NI VIRT RES %CPU COMMAND

5219 chris 20 0 12.7g 572m 8.3 firefox

Background và Foreground Processes

Bash cho phép chạy nhiều chương trình đồng thời. Thêm & để chạy background. Ctrl+Z tạm dừng tiến trình. fg %n đưa về foreground, bg %n tiếp tục background.

Terminal

$ find /usr > /tmp/allusrfiles &

[3] 15971

$ jobs

[1] Stopped vi /tmp/myfile

[2] Running find /usr > /tmp/allusrfiles &

[3]+ Running nroff -man /usr/man2/* > /tmp/man2 &

$ fg %1

# Dua job 1 ve foreground

$ bg %5

[5] Running nroff -man /usr/man4/* > /tmp/man4 &

Tín hiệu (Signals) — kill và killall

Lệnh kill gửi tín hiệu theo PID; killall gửi theo tên lệnh. Mặc định cả hai dùng SIGTERM (15). SIGKILL (9) và SIGSTOP không thể bị chặn.

Tín hiệuSốMô tả
SIGHUP1Reload config (hang up)
SIGINT2Interrupt từ keyboard (Ctrl+C)
SIGKILL9Kill ngay lập tức, không thể chặn
SIGTERM15Kết thúc sạch (mặc định)
SIGSTOP17/19/23Dừng tiến trình
SIGCONT19/18/25Tiếp tục tiến trình đã dừng
Terminal

$ kill 10432

# Gui SIGTERM (15) den PID 10432

$ kill -9 10432

# Gui SIGKILL - buoc ket thuc ngay

$ kill -SIGKILL 10432

# Tuong duong kill -9

$ killall -9 testme

# Kill tat ca tien trinh ten 'testme'

$ killall -HUP gnome-shell

# Reload gnome-shell (doc lai config)

Ưu tiên CPU với nice và renice

Mỗi tiến trình có giá trị nice từ -20 (ưu tiên cao nhất) đến 19 (ưu tiên thấp nhất), mặc định 0. User thường chỉ được đặt 0 đến 19. Root có thể đặt giá trị âm. Dùng nice khi khởi động, renice khi đang chạy.

Terminal

# nice -n +5 updatedb &

# Chay updatedb background voi nice=5

$ ps -o pid,ni,comm -p 20284

PID NI COMMAND

20284 5 updatedb

# renice -n -5 20284

20284 (process ID) old priority 5, new priority -5

# Chi root moi duoc dat gia tri am

Cgroups v2 — Giới hạn tài nguyên nhóm

Control Groups (cgroups) giới hạn và theo dõi tài nguyên cho nhóm tiến trình. Cgroups v2 là mặc định trên Ubuntu, Fedora, RHEL. Đây là nền tảng của containers (Docker, Podman) và cloud computing. Khác với nice, cgroups áp dụng cho toàn bộ nhóm tiến trình bao gồm cả child processes.

CPU Controller

Kiểm soát phân phối CPU cycles giữa các nhóm tiến trình.

Memory Controller

Giới hạn và theo dõi mức sử dụng bộ nhớ RAM.

IO Controller

Kiểm soát truy cập đến thiết bị lưu trữ block devices.

Bài Lab Thực Hành

Thực hành quản lý tiến trình Linux step by step

1

Xem tiến trình với ps

Liệt kê toàn bộ tiến trình, sắp xếp theo bộ nhớ sử dụng nhiều nhất.

Terminal

$ ps aux | head -5

USER PID %CPU %MEM VSZ RSS TTY STAT TIME COMMAND

root 1 0.0 0.2 187660 13296 ? Ss 0:02 systemd

$ ps -eo pid,user,group,vsz,rss,comm --sort=-vsz | head -5

PID USER GROUP VSZ RSS COMMAND

5219 chris chris 12763828 572024 firefox

2

Giám sát với top

Mở top, thực hành phím tắt M (sort RAM), P (sort CPU), u (filter user), q (thoát).

Terminal

$ top

top - 10:25:30 up 2:15, 2 users, load: 0.15 0.12 0.10

Tasks: 185 total, 1 running, 184 sleeping

%Cpu(s): 2.3us, 0.7sy, 96.8id

MiB Mem: 15933 total, 9234 free, 4201 used

# Nhan M de sort theo RAM, P theo CPU, q thoat

3

Chạy tiến trình background và quản lý jobs

Khởi động nhiều lệnh background và dùng fg/bg để điều khiển.

Terminal

$ sleep 300 &

[1] 23456

$ sleep 200 &

[2] 23457

$ jobs

[1]- Running sleep 300 &

[2]+ Running sleep 200 &

$ fg %1

# Ctrl+Z de dung, bg %1 de tiep tuc background

4

Gửi tín hiệu và kill tiến trình

Tìm PID của gedit và gửi các tín hiệu: SIGSTOP, SIGCONT, SIGTERM.

Terminal

$ gedit &

[1] 24680

$ kill -SIGSTOP 24680

# gedit bi pause (frozen)

$ kill -SIGCONT 24680

# gedit tiep tuc hoat dong

$ kill -15 24680

# Ket thuc gedit sach se

5

Sử dụng killall để kill theo tên

Chạy nhiều tiến trình xeyes và kill tất cả cùng lúc bằng killall.

Terminal

$ for i in $(seq 1 5); do xeyes &; done

[1] 30001

[2] 30002

...5 xeyes windows open...

$ killall xeyes

[1] Terminated xeyes

[2] Terminated xeyes

# Tat ca xeyes bi dong

6

Đặt và thay đổi nice value

Chạy lệnh với nice value, kiểm tra, rồi thay đổi bằng renice.

Terminal

$ nice -n 5 gedit &

[1] 25000

$ ps -o pid,ni,comm -p 25000

PID NI COMMAND

25000 5 gedit

$ renice -n 7 25000

25000 (process ID) old priority 5, new priority 7

Câu hỏi Ôn tập

Kiểm tra kiến thức chương 6

1

Lệnh nào hiển thị tất cả tiến trình của tất cả user kèm %CPU, %MEM?

$ ps aux

Cờ a=tất cả user, u=user-oriented format (có %CPU, %MEM), x=kể cả không có terminal.

2

Sự khác biệt giữa SIGTERM (15) và SIGKILL (9)?

SIGTERM yêu cầu tiến trình tự dọn dẹp rồi thoát — có thể bị bỏ qua. SIGKILL buộc kernel kill ngay lập tức — không thể chặn hay bỏ qua.

3

Tại sao nice=-20 có ưu tiên cao hơn nice=19?

Nice thể hiện mức "nhường nhịn" cho tiến trình khác. Nice cao (19) = nhường nhiều = ưu tiên thấp. Nice âm (-20) = ít nhường = ưu tiên cao, CPU phục vụ nhiều hơn.

4

Kill tất cả tiến trình cùng tên mà không cần biết PID?

$ killall -9 firefox

killall kill theo tên. Cẩn thận: killall bash sẽ đóng tất cả shell sessions!

5

Phân biệt VSZ và RSS trong output của ps?

VSZ = tổng bộ nhớ ảo cấp phát (kể cả phần chưa dùng, swap, shared libs). RSS = bộ nhớ vật lý đang dùng thực sự, không thể swap. RSS thường nhỏ hơn VSZ.

6

Cgroups v2 khác nice ở điểm nào?

nice chỉ ảnh hưởng CPU một tiến trình đơn lẻ. Cgroups v2 giới hạn toàn bộ nhóm tiến trình (kể cả child processes) trên nhiều loại tài nguyên: CPU, RAM, IO — nền tảng containers & cloud.

7

Lệnh nào hiển thị 10 tiến trình dùng CPU nhiều nhất?

$ ps aux --sort=-%cpu | head -11

Trong top nhấn phím P để sort theo CPU. Dấu - trong --sort=-%cpu là giảm dần.

8

SIGHUP thường dùng để làm gì với daemon?

SIGHUP (1) yêu cầu daemon reload cấu hình mà không restart. Ví dụ: kill -1 $(pidof nginx) để nginx đọc lại nginx.conf không ngắt kết nối client.

9

Tại sao user thường không thể giảm nice value (tăng ưu tiên)?

Bảo mật hệ thống: nếu user thường có thể tăng ưu tiên CPU, họ có thể chiếm gần hết CPU, ảnh hưởng user khác và hệ thống. Chỉ root được đặt niết âm (tăng ưu tiên cao hơn mặc định).