Linux là hệ điều hành đa nhiệm có số lượng người dùng rất lớn, do đó cho phép các tiến trình hoạt động đồng thời mà không ảnh hưởng đến nhau. Đối với Linux thì tiến trình rất quan trọng, nó thực thi chương trình với các tác vụ khác nhau trong hệ điều hành.
Linux cung cấp lệnh ps giúp kiểm tra các tiến trình đang hoạt động với PID của nó qua các tùy chọn khác. Nó giúp đọc thông tin tiến trình trong các tệp ảo, proc tệp hệ thống hay proc tệp ảo, … đó cũng là nguyên nhân khiến nó có tên là hệ thống tệp ảo. Trong bài viết này BKHOST sẽ cùng bạn tìm hiểu về các lệnh ps trong Linux.
Ps cung cấp cho người dùng rất nhiều tùy chọn với cú pháp như sau:
Dịch vụ Cloud VPS Giá Rẻ chất lượng cao
BKHOST đang có chương trình khuyến mãi cực shock dành cho khách hàng đăng ký Cloud VPS Giá Rẻ:
- Giảm giá lên đến 25%.
- Giá chỉ từ 87k/tháng.
- Tặng thêm 512MB Ram.
Đăng ký ngay:
Cú pháp - ps [options]
Nội dung bài viết
Sử dụng lệnh ps qua ví dụ
Các tùy chọn lệnh ps với tiến trình
1. Lựa chọn tiến trình đơn giản: Hiển thị tiến trình hiện tại của trình shell
[root@rhel7 ~]# ps PID TTY TIME CMD 12330 pts/0 00:00:00 bash 21621 pts/0 00:00:00 ps
Trong đó:
- PID – là id của tiến trình
- TTY – là loại terminal của người dùng
- TIME – thời gian CPU chạy theo giờ và phút
- CMD – tên lệnh khởi chạy tiến trình.
Lưu ý: Khi chạy lệnh ps đôi khi bạn thấy thông tin TIME trả về là 00:00:00, điều đó có nghĩa là ở thời điểm hiện tại bên trong không có thời gian CPU nào được tích lũy, do bash làm tiến trình mẹ cho các tiến trình khác được thực thi và nó không sử dụng bất kỳ thời gian nào của CPU.
2. Xem các tiến trình: Sử dụng tùy chọn sau của ps để xem các tiến trình đang chạy
[root@rhel7 ~]# ps -A [root@rhel7 ~]# ps -e
3. Xem các tiến trình không được liên kết với terminal: Dùng tùy chọn sau để xem các tiến trình không liên kết với terminal và dẫn đầu phiên:
[root@rhel7 ~]# ps -a PID TTY TIME CMD 27011 pts/0 00:00:00 man 27016 pts/0 00:00:00 less 27499 pts/1 00:00:00 ps
Lưu ý: Bạn có thể hiểu session leader là một phiên duy nhất được dùng cho mọi nhóm tiến trình, nó khởi động tất cả các quá trình khác. process ID của phiên đầu tiên sẽ tương tự như ID của phiên.
4. Xem tất cả các tiến trình ngoại trừ session leaders:
[root @ rhel7 ~] # ps -d
5. Xem tất cả các tiến trình ngoại trừ những tiến trình đáp ứng các điều kiện được chỉ định:
Ví dụ – Bạn chỉ muốn xem trình session leader và các tiến trình không được liên kết với terminal, dùng lệnh sau:
[root@rhel7 ~]# ps -a -N OR [root@rhel7 ~]# ps -a --deselect
6. Xem tất cả các tiến trình được liên kết với terminal:
[root @ rhel7 ~] # ps -T
7. Xem tất cả các tiến trình đang chạy:
[root @ rhel7 ~] # ps -r
8. Xem tất cả các tiến trình do bạn sở hữu: Là các tiến trình mà người thực thi lệnh ps là root.
[root @ rhel7 ~] # ps -x
Xử lý lựa chọn theo danh sách
Ở đây chúng ta sẽ thảo luận về cách lấy danh sách các tiến trình cụ thể với sự trợ giúp của lệnh ps. Các tùy chọn này chấp nhận một đối số dưới dạng danh sách được phân tách bằng dấu cách hoặc được phân tách bằng dấu phẩy. Chúng có thể được sử dụng nhiều lần.
Ví dụ: ps -p “1 2” -p 3,4
1. Chọn tiến trình bằng tên lệnh: Lệnh này giúp liệt kê các tiến trình có tên trong cmdlist. Khi dùng lệnh này bạn có thể không biết id của tiến trình, tuy nhiên việc tìm kiếm cũng khá dễ dàng.
Cú pháp: ps -C command_name
Ví dụ :
[root@rhel7 ~]# ps -C dhclient PID TTY TIME CMD 19805 ? 00:00:00 dhclient
2. Chọn theo ID hoặc tên nhóm: Lệnh này dùng ID để xác định nhóm người dùng tạo tiến trình.
Cú pháp:
ps -G group_name ps --Group group_name
Ví dụ :
[root@rhel7 ~]# ps -G root
3. Xem theo id nhóm
Cú pháp:
ps -g group_id ps -group group_id
Ví dụ:
[root@rhel7 ~]# ps -g 1 PID TTY TIME CMD 1 ? 00:00:13 systemd
4. Xem tiến trình theo ID tiến trình.
Cú pháp:
ps p process_id ps -p process_id ps --pid process_id
Ví dụ:
[root@rhel7 ~]# ps p 27223 PID TTY STAT TIME COMMAND 27223 ? Ss 0:01 sshd: root@pts/2 [root@rhel7 ~]# ps -p 27223 PID TTY TIME CMD 27223 ? 00:00:01 sshd [root@rhel7 ~]# ps --pid 27223 PID TTY TIME CMD 27223 ? 00:00:01 sshd
Để xem nhiều tiến trình, bạn có thể chỉ định nhiều ID cùng lúc và phân tách nó bằng dấu cách hoặc dấu phẩy.
Ví dụ:
[root@rhel7 ~]# ps -p 1 904 27223 PID TTY STAT TIME COMMAND 1 ? Ss 0:13 /usr/lib/systemd/systemd --switched-root --system --d 904 tty1 Ssl+ 1:02 /usr/bin/X -core -noreset :0 -seat seat0 -auth /var/r 27223 ? Ss 0:01 sshd: root@pts/2
Câu lệnh trên đã dùng 3 ID tiến trình là 1, 904 và 27223 phân tách bằng dấu cách.
Bạn có thể xem các tiến trình được sở hữu bởi tiến trình mẹ bằng cách chỉ định ID của tiến trình mẹ trong câu lệnh sau:
[root@rhel7 ~]# ps -p 766 PID TTY TIME CMD 766 ? 00:00:06 NetworkManager [root@rhel7 ~]# ps --ppid 766 PID TTY TIME CMD 19805 ? 00:00:00 dhclient
Ví dụ trên cho thấy tiến trình mẹ là NetworkManager có ID 766 và tiến trình được sở hữu là dhclient có ID là 19805.
5. Xem tất cả các tiến trình thuộc về bất kỳ ID phiên nào.
Cú pháp:
ps -s session_id ps --sid session_id
Thí dụ:
[root@rhel7 ~]# ps -s 1248 PID TTY TIME CMD 1248 ? 00:00:00 dbus-daemon 1276 ? 00:00:00 dconf-service 1302 ? 00:00:00 gvfsd 1310 ? 00:00:00 gvfsd-fuse 1369 ? 00:00:00 gvfs-udisks2-vo 1400 ? 00:00:00 gvfsd-trash 1418 ? 00:00:00 gvfs-mtp-volume 1432 ? 00:00:00 gvfs-gphoto2-vo 1437 ? 00:00:00 gvfs-afc-volume 1447 ? 00:00:00 wnck-applet 1453 ? 00:00:00 notification-ar 1454 ? 00:00:02 clock-applet
6. Chọn theo tty: Này liệt kê các tiến trình liên kết với tty:
Cú pháp:
ps t tty ps -t tty ps - tty tty
Ví dụ :
[root@rhel7 ~]# ps -t pts/0 PID TTY TIME CMD 31199 pts/0 00:00:00 bash 31275 pts/0 00:00:00 man 31280 pts/0 00:00:00 less
7. Chọn theo tên hoặc ID người dùng hiệu quả
Cú pháp:
ps U user_name / ID ps -U user_name / ID ps -u user_name / ID ps –User user_name / ID ps –user user_name / ID
8. Sử dụng
-f
để xem danh sách định dạng đầy đủ[tux@rhel7 ~]$ ps -af tux 17327 17326 0 12:42 pts/0 00:00:00 -bash tux 17918 17327 0 12:50 pts/0 00:00:00 ps -af
9. Sử dụng
-F
để xem định dạng bổ sung đầy đủ[tux@rhel7 ~]$ ps -F UID PID PPID C SZ RSS PSR STIME TTY TIME CMD tux 17327 17326 0 28848 2040 0 12:42 pts/0 00:00:00 -bash tux 17942 17327 0 37766 1784 0 12:50 pts/0 00:00:00 ps -F
10. Xem quá trình theo định dạng do người dùng xác định
Cú pháp:
[root @ rhel7 ~] # ps - format column_name [root @ rhel7 ~] # ps -o column_name [root @ rhel7 ~] # ps o column_name
Ví dụ:
[root@rhel7 ~]# ps -aN --format cmd,pid,user,ppid CMD PID USER PPID /usr/lib/systemd/systemd -- 1 root 0 [kthreadd] 2 root 0 [ksoftirqd/0] 3 root 2 [kworker/0:0H] 5 root 2 [migration/0] 7 root 2 [rcu_bh] 8 root 2 [rcu_sched] 9 root 2 [watchdog/0] 10 root 2
Các đối số
cmd
, pid
, user
, ppid
sẽ tương ứng với lệnh, id tiến trình, tên người dùng và id tiến trình mẹ.11. Xem định dạng điều khiển công việc BSD
[root@rhel7 ~]# ps -j PID PGID SID TTY TIME CMD 16373 16373 16373 pts/0 00:00:00 bash 19734 19734 16373 pts/0 00:00:00 ps
12. Hiển thị định dạng dài BSD
[root@rhel7 ~]# ps l F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND 4 0 904 826 20 0 306560 51456 ep_pol Ssl+ tty1 1:32 /usr/bin/X -core -noreset :0 -seat seat0 -auth /var/run/lightdm/root/:0 -noli 4 0 11692 11680 20 0 115524 2132 do_wai Ss pts/2 0:00 -bash
13. Thêm cột dữ liệu bảo mật
[root@rhel7 ~]# ps -aM LABEL PID TTY TIME CMD unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 19534 pts/2 00:00:00 man unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 19543 pts/2 00:00:00 less unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 20469 pts/0 00:00:00 ps
14. Xem lệnh với định dạng tín hiệu
[root @ rhel7 ~] # ps s 766
15. Hiển thị định dạng hướng người dùng
[root@rhel7 ~]# ps u 1 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.6 128168 6844 ? Ss Apr08 0:16 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
16. Hiển thị định dạng bộ nhớ ảo
[root@rhel7 ~]# ps v 1 PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND 1 ? Ss 0:16 62 1317 126850 6844 0.6 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
17. Dùng tùy chọn ** e ** để xem môi trường của bất kỳ lệnh nào
[root@rhel7 ~]# ps ev 766 PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND 766 ? Ssl 0:08 47 2441 545694 10448 1.0 /usr/sbin/NetworkManager --no-daemon LANG=en_US.UTF-8 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
18. Xem các tiến trình sử dụng bộ nhớ cao nhất.
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem
19. In một cây tiến trình
[root@rhel7 ~]# ps --forest -C sshd PID TTY TIME CMD 797 ? 00:00:00 sshd 11680 ? 00:00:03 \_ sshd 16361 ? 00:00:02 \_ sshd
20. Liệt kê tất cả các chủ đề cho một tiến trình cụ thể: Dùng
-T
hoặc -L
để hiển thị các chuỗi của một quá trình.[root@rhel7 ~]# ps -C sshd -L PID LWP TTY TIME CMD 797 797 ? 00:00:00 sshd 11680 11680 ? 00:00:03 sshd 16361 16361 ? 00:00:02 sshd
Tổng kết về lệnh ps trong Linux
Hy vọng thông qua bài viết này, bạn đã hiểu rõ hơn về lệnh ps trong linux thông qua các ví dụ cụ thể. Nếu bạn còn bất cứ thắc mắc gì về lệnh ps, hãy để lại bình luận ở bên dưới, BKHOST sẽ trả lời bạn trong thời gian sớm nhất.
P/s: Bạn cũng có thể truy cập vào Blog của BKHOST để đọc thêm các bài viết chia sẻ kiến thức về lập trình, quản trị mạng, website, domain, hosting, vps, server, email,… Chúc bạn thành công.
Đăng ký tên miền tại BKHOST
BKHOST đang có chương trình khuyến mại cực shock dành cho khách hàng đăng ký mới tên miền.
- Giảm giá lên đến 70%.
- Bắt đầu chỉ từ 59k/năm đầu.
Rất nhiều tên miền đẹp đang chờ bạn. Nhanh tay sở hữu ngay hôm nay trước khi đối thủ của bạn nhắm tới.