Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Linux

Cách sử dụng lệnh ps trong Linux để kill process

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.