Trong bài viết này, chúng ta sẽ xem xét 30 ví dụ hữu ích về các ps command để theo dõi các quá trình đang chạy trên hệ thống Linux. Lưu ý rằng ps tạo ra đầu ra với một dòng tiêu đề, đại diện cho ý nghĩa của mỗi cột thông tin, bạn có thể tìm thấy ý nghĩa của tất cả các nhãn trên trang man ps.
ps (quá trình trạng thái) là một tiện ích native Unix/Linux để xem thông tin về một số quá trình đang chạy trên hệ thống: nó đọc thông tin này từ các tệp ảo trong hệ thống tệp /proc. Đây là một trong những tiện ích quan trọng cho quản trị hệ thống đặc biệt trong việc giám sát quá trình, giúp bạn hiểu được điều gì đang xảy ra trong hệ thống Linux.
Nó có nhiều tùy chọn để thay đổi đầu ra, tuy nhiên, bạn sẽ thấy rằng chỉ có một số ít trong số chúng thực sự hữu ích cho việc sử dụng hàng ngày.
Liệt kê tất cả quá trình trong Shell hiện tại
1. Nếu bạn chạy lệnh ps mà không có bất kỳ đối số nào, nó sẽ hiển thị các quá trình cho shell hiện tại.
$ ps
In tất cả các quá trình ở các định dạng khác nhau
2. Hiển thị mọi quá trình hoạt động trên hệ thống Linux ở định dạng chung (Unix/Linux).
$ ps -A
OR
$ ps -e
3. Hiển thị tất cả các quá trình theo định dạng BSD.
$ ps au
OR
$ ps axu
4. Để thực hiện một liệt kê định dạng đầy đủ, thêm cờ -f hoặc -F.
$ ps -ef
OR
$ ps -eF
Hiển thị quá trình đang chạy của người dùng
5. Bạn có thể chọn tất cả các quá trình được sở hữu bởi bạn (người chạy lệnh ps, root trong trường hợp này), gõ:
$ ps -x
6. Để hiển thị các quá trình của một người dùng dựa trên ID người dùng thực (RUID) hoặc tên, sử dụng cờ -U.
$ ps -fU tecmint
OR
$ ps -fu 1000
7. Để chọn các quá trình của người dùng dựa trên ID người dùng hiệu quả (EUID) hoặc tên, sử dụng tùy chọn -u.
$ ps -fu tecmint
OR
$ ps -fu 1000
In tất cả các quá trình chạy với quyền root (ID thực và hiệu quả)
8. Lệnh dưới đây cho phép bạn xem mọi quá trình chạy với quyền người dùng root (ID thực và hiệu quả) theo định dạng người dùng.
$ ps -U root -u root
Hiển thị quá trình nhóm
9. Nếu bạn muốn liệt kê tất cả các quá trình thuộc sở hữu của một nhóm cụ thể (ID nhóm thực (RGID) hoặc tên), gõ.
$ ps -fG apache
OR
$ ps -fG 48
10. Để liệt kê tất cả các quá trình thuộc sở hữu của tên nhóm hiệu quả (hoặc phiên), gõ.
$ ps -fg apache
Hiển thị quá trình bằng PID và PPID
11. Bạn có thể liệt kê các quá trình theo PID như sau.
$ ps -fp 1178
12. Để chọn quá trình theo PPID, gõ.
$ ps -f --ppid 1154
13. Chọn bằng danh sách PID.
$ ps -fp 2226,1154,1146
Hiển thị quá trình theo TTY
14. Để chọn các quá trình theo tty, sử dụng cờ -t như sau.
$ ps -t pts/0
$ ps -t pts/1
$ ps -ft tty1
In cây quá trình
15. Một cây quá trình hiển thị cách các quá trình trên hệ thống liên kết với nhau; những quá trình mà cha của chúng đã bị giết bị nhận nuôi bởi init (hoặc systemd).
$ ps -e --forest
16. Bạn cũng có thể in cây quá trình cho một quá trình cụ thể như sau.
$ ps -f --forest -C sshd
OR
$ ps -ef --forest | grep -v grep | grep sshd
In các tiểu trình của quá trình
17. Để in tất cả các tiểu trình của một quá trình, sử dụng cờ -L, điều này sẽ hiển thị cột LWP (quá trình nhẹ) cũng như cột NLWP (số lượng các quá trình nhẹ).
$ ps -fL -C httpd
Chỉ định định dạng đầu ra tùy chỉnh
Bằng cách sử dụng tùy chọn -o hoặc --format, ps cho phép bạn xây dựng định dạng đầu ra được xác định bởi người dùng như được hiển thị bên dưới.
18. Để liệt kê tất cả các định dạng, bao gồm cờ L.
$ ps L
19. Lệnh dưới đây cho phép bạn xem PID, PPID, tên người dùng và lệnh của một quá trình.
$ ps -eo pid,ppid,user,cmd
20. Dưới đây là một ví dụ khác về định dạng đầu ra tùy chỉnh hiển thị nhóm hệ thống tệp, giá trị nice, thời gian bắt đầu và thời gian đã trôi qua của một quá trình.
$ ps -p 1154 -o pid,ppid,fgroup,ni,lstart,etime
21. Để tìm tên quá trình sử dụng PID của nó.
$ ps -p 1154 -o comm=
Hiển thị quá trình cha và con
22. Để chọn một quá trình cụ thể bằng tên của nó, sử dụng cờ -C, điều này cũng sẽ hiển thị tất cả các quá trình con của nó.
$ ps -C sshd
23. Tìm tất cả các PID của tất cả các thể hiện của một quá trình, hữu ích khi viết các tập lệnh cần đọc PIDs từ đầu ra hoặc tệp std.
$ ps -C httpd -o pid=
24. Kiểm tra thời gian thực thi của một quá trình.
$ ps -eo comm,etime,user | grep httpd
Đầu ra dưới đây cho thấy dịch vụ HTTPD đã chạy trong 1 giờ, 48 phút và 17 giây.
Khắc phục sự cố hiệu năng hệ thống Linux
Nếu hệ thống của bạn không hoạt động như nên, ví dụ: nếu nó chậm bất thường, bạn có thể thực hiện một số sửa chữa hệ thống như sau.
26. Tìm quá trình đang chạy hàng đầu theo bộ nhớ và sử dụng CPU cao nhất trong Linux.
$ ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head
OR
$ ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head
27. Để kết thúc quá trình Linux/ứng dụng không phản hồi hoặc bất kỳ quá trình nào đang sử dụng thời gian CPU cao.
Đầu tiên, tìm PID của quá trình hoặc ứng dụng không phản hồi.
$ ps -A | grep -i stress
Sau đó, sử dụng lệnh kill để chấm dứt nó ngay lập tức.
$ kill -9 2583 2584
In thông tin bảo mật
28. Hiển thị ngữ cảnh bảo mật (cụ thể cho SELinux) như sau.
$ ps -eM
OR
$ ps --context
29. Bạn cũng có thể hiển thị thông tin bảo mật theo định dạng do người dùng xác định bằng lệnh này.
$ ps -eo euser,ruser,suser,fuser,f,comm,label
Thực hiện giám sát quá trình thời gian thực bằng công cụ Watch
30. Cuối cùng, vì ps hiển thị thông tin dưới dạng tĩnh, bạn có thể sử dụng tiện ích theo dõi để thực hiện giám sát quá trình thời gian thực với đầu ra lặp đi lặp lại, hiển thị sau mỗi giây như trong lệnh dưới đây (chỉ định một lệnh ps tùy chỉnh để đạt được mục tiêu của bạn).
$ watch -n 1 'ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head'
Quan trọng: ps command chỉ hiển thị thông tin tĩnh, để xem đầu ra được cập nhật thường xuyên, bạn có thể sử dụng các công cụ như htop; top và glances: hai cái cuối cùng thực sự là các công cụ giám sát hiệu năng hệ thống Linux.