进程是linux用来表示正在运行的程序的一种抽象概念,程序内存的使用,处理器时间和I/O资源就是通过这个对象进行管理和监视的。
一个程序要先运行在用户空间,当他需要去使用硬件资源的时候,就不得不去调动内核才能取得使用权,这时候调动内核,进入内核空间,当内核处理完毕需求之后,将指令返回给用户,一个调用完成。
进程会以时间片段在CPU运行的,CPU以一根时间线被划分成无数个片段;当一个进程运行到某个阶段,需要暂时终止的时候,需要保存一个进程运行的现场,叫保存现场;执行到某片段的时候,需要中断,当再需要执行的时候,恢复现场。
运行中的程序的某个副本才叫进程;进程有生命周期,进程时活动的。
内核为每个进程都要创建一个运行信息,存储每一个进程的相关信息,及进程的结构体,即task struct。这里面的信息有:
1.进程的地址空间映射;
2.进程的当前状态(睡眠状态,停止状态,可运行状态等)
3.进程执行的优先级;
4.进程已用资源的信息;
5.进程已打开的文件和网络端口的信息;
6.进程的信号掩码(一个记录,确定要封锁哪些信号)
7.进程属主。
一个进程由一个地址空间和内核内部的一组数据结构组成。地址空间是内核标记出的供进程使用的一组内存页面。它包含了进程只在执行的代码和库,进程变量,进程栈以及进程运行时所需要的各种其他信息。
一个线程是一个进程内执行了一次fork()的结果,线程继承了包含他的进程的许多属性(进程的地址空间等)。
进程的调度优先级决定了他接受到CPU的时间的多少。nice值决定了进度优先级。静态nice值越小,优先级越高。
为了创建一个新的进程,一个进程就会用系统fork来复制自身,fork创建原进程的一个副本,这个副本大致与父进程相同,新进程拥有不同的PID。
fork具有独一无二的特性,它能够返回两个值,对子进程来说,返回为0,对父进程来说,返回一个PID。
linux系统最独特进程时init进程。进程号总为1,他是其他进程的GOD,除了内核创建的几个进程外,其他所有进程都是他的后代。
接下来看一些查看进程的命令:
1.ps命令:报告当前进程的信息
选项;
#1 a:所有与终端相关的进程;
x:所有与终端无关的进程;
u:以用户为中心组织进程状态信息显示;
所以第一个组合为:aux,示例:所有用户的进程信息
[[email protected] yum.repos.d]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.7 59772 7704 ? Ss 12月25 0:13 /usr/lib/systemd/systemd --switched-root --system --deserialize 24 root 2 0.0 0.0 0 0 ? S 12月25 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 12月25 0:03 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S< 12月25 0:00 [kworker/0:0H] root 7 0.0 0.0 0 0 ? S 12月25 0:00 [migration/0]
显示的第一行的意义:
VSZ:虚拟内存集;
RSS:Resident Size,常驻内存集;
STAT:状态
R:running 运行中状态
S:interruptable sleeping 可中断睡眠状态
D:uninterruptable sleeping 不可中断睡眠状态
T:Stopped 停止状态
Z:zombie 僵死状态
+:前台进程
l:多线程进程
N:低优先级进程
<:高优先级进程
s:session leader
#2 选项:
-e:显示所有进程
-f:显示完整格式的进程信息
常用组合之二:-ef,示例:
[[email protected] yum.repos.d]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 12月25 ? 00:00:13 /usr/lib/systemd/systemd --switched-root --system --deserialize 24 root 2 0 0 12月25 ? 00:00:00 [kthreadd] root 3 2 0 12月25 ? 00:00:03 [ksoftirqd/0] root 5 2 0 12月25 ? 00:00:00 [kworker/0:0H] root 7 2 0 12月25 ? 00:00:00 [migration/0]
第一行意义:
PPID:父进程
C:CPU的占用百分比
STIME:启动时间
TTY:与何终端相关
TIME:CPU累积运行时间
#3选项
-F:显示完整格式的进程信息
-H:以层级结构显示进程的相关信息;
常用组合之三:-eFH,示例
[[email protected] yum.repos.d]# ps -eFH UID PID PPID C SZ RSS PSR STIME TTY TIME CMD root 2 0 0 0 0 0 12月25 ? 00:00:00 [kthreadd] root 3 2 0 0 0 0 12月25 ? 00:00:03 [ksoftirqd/0] root 5 2 0 0 0 0 12月25 ? 00:00:00 [kworker/0:0H] root 7 2 0 0 0 0 12月25 ? 00:00:00 [migration/0]
第一行意义:
PSR:运行于哪颗CPU之上
SZ:使用掉的内存大小
#4选项
o field1, field2,...:自定义要显示的字段列表,以逗号分隔;
常用的field:pid, ni, pri, psr, pcpu, stat, comm, tty, ppid, rtprio
ni:nice值;
priority:priority, 优先级;
rtprio:real time priority,实时优先级;
常用组合::-eo, axo
示例:仅显示进程PID及命令
[[email protected] yum.repos.d]# ps axo pid,command PID COMMAND 1 /usr/lib/systemd/systemd --switched-root --system --deserialize 24 2 [kthreadd] 3 [ksoftirqd/0] 5 [kworker/0:0H] 7 [migration/0]
2.top命令:显示linux的进程信息
排序:
P:以占据CPU百分比排序;
M:以占据内存百分比排序;
T:累积占用CPU时间排序;
默认以占用CPU百分比排序,示例,以占用内存排序:
top - 14:50:39 up 18:42, 2 users, load average: 0.00, 0.02, 0.05 Tasks: 357 total, 1 running, 356 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.2 us, 0.2 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st KiB Mem : 1003184 total, 600632 free, 165772 used, 236780 buff/cache KiB Swap: 2097148 total, 2097148 free, 0 used. 638776 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 794 root 20 0 550176 16124 5628 S 0.3 1.6 0:13.51 tuned 840 root 20 0 103736 15640 3228 S 0.0 1.6 0:00.19 dhclient 3351 root 20 0 103736 15624 3216 S 0.0 1.6 0:00.51 dhclient 833 polkitd 20 0 516068 12656 4336 S 0.0 1.3 0:01.92 polkitd
首部信息分为三块:
uptime信息:l命令
tasks及cpu信息:t命令
内存信息:m命令
其中第一行信息解释:
显示系统时间、运行时长及平均负载;过去1分钟、5分钟和15分钟的平均负载;等待运行的进 程队列的长度;
第三行:
us:用户空间进程占用的CPU百分比
sy:内核空间进程占用的CPU百分比
ni:用于nice值调整占用的CPU百分比
id:空闲百分比
wa:等待IO消耗的时间CPU百分比
hi:处理硬件中断消耗的CPU百分比
si:处理软件终端小号的CPU百分比
st:被虚拟环境偷走的CPU百分比
进程状态字段含义:
PR:进程优先级
NI:nice值
VIRT:虚拟内存集
RES:常驻内存集
SHR:共享内存空间
S:当前状态
%CPU:占用CPU时间百分比
%MEM:占用内存百分比
TIME+:运行时间
退出命令:q
修改刷新时间间隔:s
终止指定的进程:k
示例:修改间隔时间,按s
top - 15:41:11 up 19:33, 2 users, load average: 0.00, 0.01, 0.05 Tasks: 357 total, 1 running, 356 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.2 us, 0.5 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1003184 total, 599760 free, 166632 used, 236792 buff/cache KiB Swap: 2097148 total, 2097148 free, 0 used. 637988 avail Mem Change delay from 3.0 to 2
示例,杀掉某进程,按k
top - 15:42:25 up 19:34, 2 users, load average: 0.00, 0.01, 0.05 Tasks: 357 total, 2 running, 355 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.2 us, 0.3 sy, 0.0 ni, 99.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1003184 total, 599916 free, 166476 used, 236792 buff/cache KiB Swap: 2097148 total, 2097148 free, 0 used. 638144 avail Mem PID to signal/kill [default pid = 794] 10064
使用选项:
-d #:指定刷新时间间隔,默认为3秒;
-b:以批次方式显示;
-n #:显示多少批次;
3.htop 命令:与top类似,此命令需要手动安装。
右边tasks只是用户空间的进程;
支持鼠标,点或者按F1进入帮助选项
选项:子命令
u:查看某个用户进程 H:显示或隐藏用户线程 K;隐藏或显示内核线程
F6:指定排序 F:光标在哪个线程 PMT:排序方式 c:标记出一个进程和子进程
a:将选定的进程绑定至某指定的CPU核心; l:跟踪显示某个进程打开的所以文件
s:跟踪选定的进程的系统调用; t:以层级关系显示各进程状态;
选项:
-d #:指定延迟时间间隔;
-u UserName:仅显示指定用户的进程;
-s COLUME:以指定字段进行排序;
可以利用子命令进行想要的显示。
4.dstat命令:用于生成资源信息统计的工具。默认给的选项是-cdngy
格式:dstat [-afv] [options..] [delay [count]]
常用选项:
-c, --cpu:显示cpu相关信息;
-C #,#,...,total
-d, --disk:显示磁盘的相关信息
-D sda,sdb,...,tobal
-n:Interface的相关统计数据;
-g:显示page相关的速率数据;
-m:Memory的相关统计数据
-p:显示process的相关统计数据;
-r:显示io请求的相关的统计数据;
-s:显示swapped的相关统计数据;
-y:system
示例:
[[email protected] yum.repos.d]# dstat -c ----total-cpu-usage---- usr sys idl wai hiq siq 0 0 100 0 0 0 0 0 100 0 0 0 [[email protected] yum.repos.d]# dstat -d -dsk/total- read writ 1669B 2432B
[[email protected] yum.repos.d]# dstat -cdgmnprs ----total-cpu-usage---- -dsk/total- ---paging-- ------memory-usage----- -net/total- ---procs--- --io/total- ----swap--- usr sys idl wai hiq siq| read writ| in out | used buff cach free| recv send|run blk new| read writ| used free 0 0 100 0 0 0|1663B 2425B| 0 0 | 148M 98.2M 477M 258M| 0 0 |0.0 0 0.3|0.10 0.17 | 0 2048M 0 0 100 0 0 0| 0 32k| 0 0 | 148M 98.2M 477M 258M| 180B 1306B| 0 0 0| 0 3.00 | 0 2048M 0 1 100 0 0 0| 0 0 | 0 0 | 148M 98.2M 477M 258M|2202B 506B| 0 0 0| 0 0 | 0 2048M 0 0 99 0 0 0| 0 0 | 0 0 | 148M 98.2M 477M 258M| 60B 506B| 0 0 0| 0 0 | 0 2048M 0 0 100 0 0 0| 0 0 | 0 0 | 148M 98.2M 477M 258M| 410B 506B| 0 0 0| 0 0 | 0 2048M
--aio:统计异步IO
--ipc:统计进程间各自通信信息(消息队列,信号量,共享内存)
--lock:文件锁信息:
--tcp:动态显示TCP状态各连接状态信息的数量
--udp:动态显示UDP状态各连接状态信息的数量
--raw :裸套接字相关信息
--socket 用来显示tcp udp端口状态
示例:
[[email protected] yum.repos.d]# dstat --tcp --aio --ipc --lock --socket ----tcp-sockets---- async --sysv-ipc- ---file-locks-- ------sockets------ lis act syn tim clo| #aio|msg sem shm|pos lck rea wri|tot tcp udp raw frg 13 1 0 0 0| 0 | 0 3 0|2.0 4.0 0 6.0|449 7 6 0 0 13 1 0 0 0| 0 | 0 3 0|2.0 4.0 0 6.0|449 7 6 0 0 13 1 0 0 0| 0 | 0 3 0|2.0 4.0 0 6.0|449 7 6 0 0
#还可显示占用资源量较大的进程
--top-cpu:显示最占用CPU的进程;
[[email protected] yum.repos.d]# dstat --top-cpu -most-expensive- cpu process events/1 0.1 httpd 0.5 sshd: [email protected] irqbalance 0.5
--top-io:最占用io的进程;
--top-mem:最占用内存的进程;
--top-lantency:延迟最大的进程;
以上即为dsta的用法。