ps
要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而 ps
命令就是最基本同时也是非常强大的进程查看命令。
ps
命令是Process Status的缩写。ps
命令用来列出系统中当前运行了哪些进程,确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。kill
命令用于杀死进程。
值得注意的是,ps
命令所提供的查看结果并不动态连续的,而是当前那些进程的快照;如果想对进程时间监控,应该用 top
工具。
ps工具标识进程的5种状态码
**D 不可中断睡眠(disk sleep)**:一般表示进程正在跟硬件交互,并且交互过程不允许被其他进程或中断。 比如一个进程向磁盘读写数据时。
R 运行(runing) :正在运行或在运行队列中等待
S 中断(sleeping) :休眠中, 受阻, 在等待某个条件的形成或接受到信号。
T 停止(stopped) :进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行
Z 僵死(zombie) :进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放
ps工具常用选项
-A 显示所有进程
-e 等于“-A”
c 显示进程的真实名称
f 显示程序间的关系
-H 显示树状结构
u 指定用户的所有进程
-aux 显示所有包含其他使用者的行程以及详细信息
输出信息的意义
ps -A
全部进程信息,显示的基础条目太多,但是输出信息并不详细,不常用
1 2 3 4 5 6 7 8
| [root@dengpangpang ~]$ ps -A PID TTY TIME CMD 1 ? 00:03:17 systemd 2 ? 00:00:00 kthreadd 3 ? 00:00:03 ksoftirqd/0 5 ? 00:00:00 kworker/0:0H 7 ? 00:00:00 migration/0 ......
|
ps -u
显示指定用户的信息, ps -A 的过滤版
1 2 3 4 5 6 7 8
| [root@dengpangpang ~]$ ps -u root PID TTY TIME CMD 1 ? 00:03:17 systemd 2 ? 00:00:00 kthreadd 3 ? 00:00:03 ksoftirqd/0 5 ? 00:00:00 kworker/0:0H 7 ? 00:00:00 migration/0 8 ? 00:00:00 rcu_bh
|
ps -ef
显示所有进程信息,连同命令行,是最常用的命令。常与 grep 组合,查找特定进程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| [root@dengpangpang ~]$ ps -ef | grep python UID PID PPID C STIME TTY TIME CMD root 866 1 0 2023 ? 00:04:06 /usr/bin/python2 -Es /usr/sbin/tuned -l -P root 15243 10556 0 02:22 pts/0 00:00:00 grep --color=auto python root 24917 1 0 Jan11 ? 00:00:01 python3 manage.py runserver 0.0.0.0:8000 root 24921 24917 1 Jan11 ? 01:51:21 /usr/bin/python3 manage.py runserver 0.0.0.0:8000
|
ps -aux
列出目前所有的正在内存当中的程序的详细信息,可以使用ps -aux > info.txt
保存到文件中查看。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| [root@dengpangpang ~]$ ps -aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.2 190876 3832 ? Ss 2023 3:17 /usr/lib/systemd/systemd --switched-root --system --deserialize 22 root 2 0.0 0.0 0 0 ? S 2023 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 2023 0:03 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S< 2023 0:00 [kworker/0:0H] root 7 0.0 0.0 0 0 ? S 2023 0:00 [migration/0]
|
ps -l
将目前属于自己这次登入的 PID 与相关信息列示出来,看情况用。
1 2 3 4 5 6 7 8 9
| [root@dengpangpang ~]$ ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 10556 10553 0 80 0 - 28893 do_wai pts/0 00:00:00 bash 0 R 0 15340 10556 0 80 0 - 38309 - pts/0 00:00:00 ps
|
pstree
ps
命令可以进程信息,但是对于它们之间的关系却显示得不够清晰。pstree
命令可以将进程以及子进程的关系以树状显示,非常优雅。
最常用的是pstree -p pid
,指定一个进程的pid,查看它的子进程关系树,并显示子进程pid。
1 2 3 4 5 6 7 8 9 10 11 12 13
| [root@dengpangpang ~]$ pstree -p 24917 python3(24917)───python3(24921)─┬─{python3}(24925) ├─{python3}(24934) ├─{python3}(26860) ├─{python3}(26861) ├─{python3}(26863) ├─{python3}(26864) ├─{python3}(26865) ├─{python3}(26866) ├─{python3}(27234) ├─{python3}(27235) ├─{python3}(27283) └─{python3}(27284)
|
pgrep
简陋版的ps
命令,通过进程名来查找进程,默认只显示pid,-l
显示进程名。
1 2 3 4
| [root@dengpangpang ~]$ pgrep -l ss 531 assist_daemon 1319 sshd 10553 sshd
|
pidstat
pidstat
是sysstat工具的一个命令,用于监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况。
pidstat
的用法:
1
| pidstat [ 选项 ] [ <时间间隔> ] [ <次数> ]
|
选项
-p
: 指定进程pid
1 2 3 4 5 6 7 8 9
| [root@dengpangpang ~]$ pidstat -p 24921 1 10 Linux 3.10.0-957.21.3.el7.x86_64 (dengpangpang) 01/17/2024 _x86_64_ (2 CPU)
03:07:25 AM UID PID %usr %system %guest %CPU CPU Command 03:07:26 AM 0 24921 1.00 1.00 0.00 2.00 0 python3 03:07:27 AM 0 24921 2.00 0.00 0.00 2.00 0 python3 03:07:28 AM 0 24921 1.00 1.00 0.00 2.00 1 python3 03:07:29 AM 0 24921 1.00 0.00 0.00 1.00 1 python3
|
-u
:默认的参数,显示各个进程的cpu使用统计
1 2 3 4
| %usr:进程在用户空间占用cpu的百分比 %system:进程在内核空间占用cpu的百分比 %guest:进程在虚拟机占用cpu的百分比 %CPU:进程占用cpu的百分比
|
-d
:查看I/O情况
1 2 3
| kB_rd/s:每秒从磁盘读取的KB kB_wr/s:每秒写入磁盘KB kB_ccwr/s:任务取消的写入磁盘的KB。当任务截断时的pagecache的时候会发生。
|
-r
:显示内存使用统计
1 2 3 4
| Minflt/s:任务每秒发生的次要错误,不需要从磁盘中加载页 Majflt/s:任务每秒发生的主要错误,需要从磁盘中加载页 VSZ:虚拟地址大小,虚拟内存的使用KB RSS:常驻集合大小,非交换区五里内存使用KB
|
top
top
命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| [root@dengpangpang ~]$ top top - 10:30:02 up 21 days, 9:32, 1 user, load average: 0.02, 0.07, 0.05 Tasks: 91 total, 1 running, 90 sleeping, 0 stopped, 0 zombie %Cpu(s): 3.3 us, 0.0 sy, 0.0 ni, 96.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1882008 total, 161012 free, 381260 used, 1339736 buff/cache KiB Swap: 0 total, 0 free, 0 used. 1274324 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 190876 3620 2384 S 0.0 0.2 3:24.43 systemd
|
选项
-p
:指定进程pid
-n
:设置信息更新次数
-d
:设置信息更新间隔
互动指令
按数字1
,切换显示每个逻辑CPU的使用情况
按字母b
,对当前处于运行状态的进程加亮显示
按字母c
,切换显示完整的进程命令
按字母m
, 切换显示内存信息
按字母t
,切换显示CPU状态信息
按字母M
, 根据驻留内存大小进行排序
按字母P
, 根据CPU使用百分比大小进行排序
按字母T
, 根据时间/累计时间进行排序
按字母k
,终止一个进程
按字母r
, 重新安排一个进程的优先级别
按字母h
, 显示帮助信息
按字母q
, 退出程序
htop
htop
同样是Linux系统中的任务管理器,是top
的升级版,它相对于top命令有以下优势:
- 功能更加丰富且可自定义
- 支持鼠标操作
- 炫酷