进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础
树形结构展示进程树
首先确保你安装了 psmisc.
- [root@localhost~]#yum install psmisc - y
- pstree [-a, --arguments] [-c, --compact] [-h, --highlight-all, -Hpid, --highlight-pid pid]
- [-g] --show-pgids] [-l, --long] [-n, --numeric-sort] [-N, --ns-sortns [-p, --show-pids]
- [-s, --show-parents] [-S, --ns-changes] [-u, --uid-changes] [-Z, --security-context]
- [-A, --ascii, -G, --vt100, -U, --unicode] [pid, user]
- pstree -V, --version
- 选项:
- -h:高亮显示当前的进程及其祖先
- -H:高亮显示指定进程及其祖先
- -p:显示进程的pid
- -s:显示特定进程的直系进程
- -u:指定用户
查看指定用户的进程信息带进程号
- [root@localhost ~]# pstree -pu zhaojiedi1992
- bash(15368)─┬─vim(15389)
- └─vim(15390)
查看当前进程的直系进程
- [root@localhost ~]# pstree -ps $$ # $$就是当前进程号。
- systemd(1)───sshd(1001)───sshd(15251)───bash(15255)───pstree(15433)
显示进程信息
语法 ps [options]
这个命令比较特殊,支持了三种风格的命令使用
我个人是对这个命令是习惯 BSD 风格的,也就是习惯使用 ps aux 而不是 ps -ef。 这个命令经常配合 grep 使用。
- 参数:
- a:列出终端相关的,如果想列出所有进程需要配合x
- u:显示面向用户的格式
- x:列出终端先关的,如果列出所有进程需要配合a
- f :显示进程树,这个显示效果跟pstree的效果差远啦
- k :根据指定指标去排序
- --sort: 根据指定指标去排序,%cpu以cpu占用排序,-%cpu反序排
- o :设置显示的列
- L :显示支持的属性列表
- -C :指定命令,多个命令用,分割
- -L :显示线程
- -u : 指定有效用户ID或名称
- -U : 指定真正的用户ID或名称
- -p : 显示指定pid进程
- --pid :显示属于pid的子进程
- --forest:树型显示
- 列:
- USER :用户
- PID:进程id
- %CPU:cpu占用率
- %MEM:内存占用率
- VSZ:虚拟内存大小
- RSS:真实内存大小
- TTY:终端
- STAT:状态
- START:开始时间
- TIME:占用cpu时间
- COMMAND:命令
- PRI:优先级
- RTPRIO:实时优先级
- PSR:当前进程对应的处理器
- NI:进程的nice值
- 进程状态:
- D:不可终端睡眠
- R:运行或者在运行队列中
- S:终端睡眠(等待一个时间完成)
- T:被作业控制信号停止
- t:被调试追踪停止
- W:内存换页中
- X:死亡了
- Z:蜘蛛进程
- <:高优先级的
- N:第优先级的
- L:有页面锁定在内存
- s:是一个会话的领导者
- l:是一个多线程
- +:是一个前台进程
查看所有进程信息
- [root@localhost ~]# ps aux
- USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
- root 1 0.0 0.1 193700 6836 ? Ss 11:00 0:08 /usr/lib/systemd/systemd --switched-roo
- -------------------------------------下面的行省去了--------------------------------------------------------
查看所有进程的命令,进程 id,cpu 占用,内存占用信息 ,并按照 cpu 占用排序
- [root@localhost ~]# ps axo cmd,pid,%cpu,%mem k %cpu
查看指定终端的进程
- [root@localhost~]#ps - t pts / 3
有效用户和真正用户的区别
- [zhaojiedi1992@localhost ~]$ passwd # 在另一个终端上执行, 别修改,就让这个命令卡在这个界面
- Changing password for user zhaojiedi1992.
- Changing password for zhaojiedi1992.
- (current) UNIX password:
- [root@localhost ~]# ps -u zhaojiedi1992 # 查看有效用户为zhaojiedi1992的进程
- PID TTY TIME CMD
- 15368 pts/3 00:00:00 bash
- 15389 pts/3 00:00:00 vim
- 15390 pts/3 00:00:00 vim
- [root@localhost ~]# ps -U zhaojiedi1992 # 查看真正用户为zhaojiedi1992的进程
- PID TTY TIME CMD
- 15368 pts/3 00:00:00 bash
- 15389 pts/3 00:00:00 vim
- 15390 pts/3 00:00:00 vim
- 15749 pts/3 00:00:00 passwd
- 我们可以看出来,用户zhaojiedi1992使用了passwd这个命令,这个命令有suig的,运行的时候是以root运行的,所以在有效用户上查看没有passwd的,但是使用真正用户可以看到的
- [root@localhost ~]$ renice -n 20 15790 # 修改指定的进程的nice值
- [root@localhost ~]$ nice -n -5 ping www.baidu.com # 在运行命令的时候就指定nice值
- [zhaojiedi1992@localhost ~]$ chrt -p 10 $$ # 调整实时优先级, 这个实时优先级不是想怎么该就怎么该的
- chrt: unsupported priority value for the policy: 10: see --max for valid range
- [zhaojiedi1992@localhost ~]$ chrt --max # 查看可以调整的范围
- SCHED_OTHER min/max priority : 0/0
- SCHED_FIFO min/max priority : 1/99
- SCHED_RR min/max priority : 1/99
- SCHED_BATCH min/max priority : 0/0
- SCHED_IDLE min/max priority : 0/0
- SCHED_DEADLINE min/max priority : 0/0
- pgrep [options] pattern
- pkill [options] pattern
- 选项
- -u:生效者
- -U:真正发起者
- -t:指定终端
- -l:显示进程名(pgrep可用)
- -a:显示完整格式的进程名(pgrep可用)
- -P:显示指定进程的子进程
查看 / dev/pts/3 终端下的完整进程名,并全部杀掉他们
- [root@localhost ~]# pgrep -t pts/4 -a # 查看pts/4终端的完整进程信息
- 3282 -bash
- 3301 su - zhaojiedi1992
- 3302 -bash
- 3325 vim a.txt
- [root@localhost ~]# pkill -t pts/4 # 杀掉pts/4终端的进程
查找运行进程的 pid
- [root@localhost ~]# pidof bash
- 16078 1139
查找运行进程的 pid
- [root@localhost ~]# uptime
- 23:15:46 up 12:13, 2 users, load average: 0.00, 0.01, 0.05
动态显示进程状态信息,ps 是一个静态的
- cpu相关:
- us:用户空间运行时间(user space)
- sy:内核空间运行时间(system )
- ni:nice过的进程运行时间(nice)
- id:空闲进程时间(idle)
- wa:等待io时间(wait)
- hi:硬中断(hardware interrupts)
- si:软中断(software interrupts)
- st:虚拟机偷走的时间(stolen time)
- 内存相关:
- total:总内存
- free:空闲内存
- used:使用内存
- buff/cache:buffer/cache内存
- 排序:
- P:按照cpu占比排序
- M:按照内存占比排序
- T:按照占据cpu时间排序
- 首部信息显示:
- l:uptime信息
- t:tasks及其cpu信息
- cpu分别显示:1(数字)
- m:内存信息显示
- 命令:
- s:修改刷新间隔
- k:终止指定进程
- w:保存当前设置到~/.toprc文件,下次使用top采用这个设置
- q:退出
- [root@localhost ~]# top
- top - 23:23:47 up 12:21, 2 users, load average: 0.00, 0.01, 0.05
- Tasks: 129 total, 1 running, 128 sleeping, 0 stopped, 0 zombie
- %Cpu(s): 0.1 us, 0.0 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
- KiB Mem : 4030172 total, 3323524 free, 175576 used, 531072 buff/cache
- KiB Swap: 4063228 total, 4063228 free, 0 used. 3565040 avail Mem
- PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
- 711 root 20 0 305080 6132 4768 S 0.3 0.2 1:02.42 vmtoolsd
- 16235 root 20 0 157732 2224 1532 R 0.3 0.1 0:00.13 top
- 1 root 20 0 193700 6836 4060 S 0.0 0.2 0:08.91 systemd
- 2 root 20 0 0 0 0 S 0.0 0.0 0:00.07 kthreadd
- 3 root 20 0 0 0 0 S 0.0 0.0 0:00.02 ksoftirqd/0
是一个加强版本的 top 命令,比较炫。
- [root@localhost~]#yum install htop - y#安装htop,这个软件是在epel源中的。
- 选项:
- -d:指定延迟
- -u:仅显示指定用户的进程
- -s:以指定字段进行排序
- 子命令:
- s:根据指定进程的系统调用
- l:显示选定进程打开的文件列表
- a:将选定的进程绑定到指定的cpu上
- t:显示进程树
- 功能键:
- F1:帮助
- F2:设置
- F3:查找
- F4:过滤
- F5:树显示
- F6:排序
- F7:减小nice
- F8:增加nice
- F9:kill进程
- F10:退出,q也可以退出的
- [root@localhost yum.repos.d]#htop
效果图如下:
查看虚拟内存信息
- vmstat [options] [delay [count]]
- delay:延迟
- count:显示次数
- Procs:
- r:正在运行中或等待运行的进程数量
- b: 不可终端睡眠的进程数量
- Memory:
- swpd: 交互内存的使用量
- free: 空闲物理内存总量
- buff: 用于buffer的内存总量
- cache: 用于cache的内存总量
- inact:非活动内存(配合-a)
- active: 活动内存(配合-a)
- Swap:
- si: 从磁盘交互进内存的速率(kb/s)
- so: 从内存进入磁盘交互的速率(kb/s)
- IO:
- bi: 读取磁盘到系统的速率(kb/s)
- bo: 系统写到磁盘的速率(kb/s)
- System:
- in: 终端速率
- cs: 上下文切换速率
- CPU:
- us:用户空间运行时间(user space)
- sy:内核空间运行时间(system )
- id:空闲进程时间(idle)
- wa:等待io时间(wait)
- st:虚拟机偷走的时间(stolen time)
- procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
- r b swpd free buff cache si so bi bo in cs us sy id wa st
- 1 0 0 3490004 2108 361132 0 0 19 15 46 34 0 0 99 1 0
- 0 0 0 3489964 2108 361132 0 0 0 0 159 134 0 0 100 0 0
- 0 0 0 3489964 2108 361132 0 0 0 14 163 140 0 0 100 0 0
查看 io 的信息
- [root@localhost cd]#yum install systat
- iostat[ - c][ - d][ - h][ - k | -m][ - N][ - t][ - V][ - x][ - y][ - z][ - j {
- ID | LABEL | PATH | UUID | ...
- }][[ - T] - g group_name][ - p[device[, ...] | ALL]][device[...] | ALL][interval[count]]
- interval:时间间隔count: 显示次数
- 选项:
- -h:人类易读的格式显示单位
- -p:显示分区的,而不仅仅是磁盘的
- -x:扩展信息
- cpu相关:
- %user:用户级别的应用程序的cpu占比
- %nice:调整过nice的应用程序的cpu占比
- %system:系统级别的cpu占比
- %iowait:io等待的cpu占比
- %steal:别虚拟机偷取的cpu占比
- %idle:空闲的(没有io请求的)cpu占比
- 设备相关:
- tps:每秒的事务量
- Blk_read/s:每秒的块读取速度
- Blk_wrtn/s:每秒的块写入速度
- Blk_read:读取的块大小合计
- Blk_wrtn:写入的块大小合计
- [root@localhost cd]# iostat -x -d -p 1 1
- Linux 3.10.0-693.el7.x86_64 (localhost) 12/16/2017 _x86_64_ (4 CPU)
- Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
- sda 0.00 0.08 1.43 0.69 40.74 90.25 123.20 0.09 40.74 15.97 92.11 9.01 1.92
- sda1 0.00 0.00 0.39 0.00 1.20 0.43 8.41 0.00 1.01 0.93 37.50 0.93 0.04
- sda2 0.00 0.08 1.04 0.69 39.32 89.82 149.09 0.09 49.76 21.61 92.17 10.94 1.90
- scd0 0.00 0.00 0.18 0.00 4.08 0.00 45.70 0.00 5.78 5.78 0.00 3.42 0.06
- dm-0 0.00 0.00 0.99 0.77 38.32 89.38 145.46 0.09 51.25 22.66 88.21 10.77 1.89
- dm-1 0.00 0.00 0.02 0.00 0.47 0.00 47.40 0.00 4.49 4.49 0.00 2.98 0.01
- dm-2 0.00 0.00 0.02 0.00 0.24 0.43 76.64 0.00 1.58 0.84 16.25 1.08 0.00
报告指定进程的内存映射
- pmap[options] pid[...]
- [root@localhost cd]# pmap 2245
- 2245: vim a.txt
- 0000000000400000 2112K r-x-- vim
- 000000000080f000 4K r---- vim
- 00007f7199024000 2044K ----- libutil-2.17.so
- 00007f7199223000 4K r---- libutil-2.17.so
- ----------------------------中间信息跳过不显示了------------------------------------
- total 148884K
一个跨平台的系统监控工具
- [root@localhost cd]#yum install glances - y#在epel yum源
- glances[OPTIONS]
- 选项:
- -c:作为客户端
- -s:作为服务端
- -B指定绑定ip,默认是绑定所有ip
- -p:指定端口,默认是61209
在一台机器上
- [root@localhost cd]# glances -s & #后台运行
- [1] 2290
- Glances server is running on 0.0.0.0:61209
在另外一个机器上
- [root@localhost~]#glances - c 192.168.1.101
效果图如下
系统资源统计,用于代替 vmstat,iostat 的
- [root@localhost~]#yum install dstat - y
- dstat [-afv] [options..] [delay [count]]
- delay :延迟
- count: 次数
- 选项:
- -c:显示cpu相关信息
- -d:显示磁盘相关信息
- -m:显示内存相关信息
- -n:显示网络相关信息
- -p:显示进程相关信息
- -r:显示io请求相关信息
- -s:显示swaped相关信息
- --top-cpu:显示最占用cpu的进程
- --top-mem:显示最占用内存的进程
- [root@localhost ~]# dstat -v 1 2
- ---procs--- ------memory-usage----- ---paging-- -dsk/total- ---system-- ----total-cpu-usage----
- run blk new| used buff cach free| in out | read writ| int csw |usr sys idl wai hiq siq
- 0 0 0.4| 278M 3468k 420M 3234M| 0 0 | 33k 69k| 142 107 | 0 0 99 0 0 0
- 0 0 0| 278M 3468k 420M 3234M| 0 0 | 0 0 | 73 55 | 0 0 100 0 0 0
- 0 0 0| 278M 3468k 420M 3234M| 0 0 | 0 0 | 63 57 | 0 0 100 0 0 0
类似 top 命令的 io 监控
- [root@localhost~]#yum install iotop - y
给指定进程发信号,大多数用于关闭进程
- kill [-s signal|-p] [-q sigval] [-a] [--] pid...
- kill -l [signal]
- 常用信号:
- 0)用于测试进程是否存在
- 1)SIGHUP:无需关闭进程让其重读配置文件
- 2)SIGINT:中止正在运行的进程,相当于ctrl+c
- 3) SIGQUIT:退出,相当于ctrl+\
- 9) SIGKILL:强制杀死正在运行的进程
- 15)SIGTERM:终止正在运行的进程
- 18)SIGCONT:继续运行
- 19)SIGSTOP:后台睡眠
- 指定信号方式:
- 数字方式,如1
- 信号完整名字,如SIGHUP
- 信号简写,如HUP
查看进程是否存在
- [root@localhost ~]# pidof vim # 查看指定进程的pid
- 2245
- [root@localhost ~]# kill -0 2245 # 发送0信号
- [root@localhost ~]# echo $? # 如果结果为0代表进程存在,否则不存在
- 0
杀掉进程
- [root@localhost~]#kill - 9 2245
杀掉所有 httpd 进程
- [root@localhost~]#killall httpd
来源: http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_045_ps.html