什么是进程
进程是一个在系统中运行的程序
进程是已启动的可执行程序的运行实例,进程有以下组成部分:
-
已分配内存的地址空间
-
安全属性,包括所有权凭据和特权
-
进程代码的一个或多个执行线程
-
进程状态
程序:二进制文件,静态/bin/date,/usr/sbin/httpd,/usr/sbin/sshd,/usr/local/nginx/sbin/ngix
进程:是程序运行的过程,动态,有生命周期及运行状态
进程类型
- 守护进程:在系统引导过程中启动的进程,跟终端无关的进程
- 前台进程:跟终端相关,通过终端启动的进程
父进程复制自己的地址空间(fork)创建一个新的(子)进程结构。每个新进程分配一个唯一的进程ID(PID),满足跟踪安全性之需。PID和父进程ID(PPID)是子进程环境的元素,任何进程都可以创建子进程,所有进程都是第一个系统进程的后代:
centos5/6:使用init命令启动一个进程
centos7:使用 systemd启动一个进程
进程状态
子进程继承父进程的安全性身份、过去和当前的文件描述符、端口和资源特权、环境变量,以及程序代码。随后,子进程可能exec自己的程序代码。通常,父进程在子进程运行期间处于睡眠(sleeping)状态。当子进程完成时发出(exit)信息请求,在退出时,子进程已经关闭或丢弃了其资源环境,剩余的部分称之为僵尸(zombie)。父进程在子进程退出时收到信号而被唤醒,清理剩余的结构,然后继续执行其自己的程序代码。
在多任务处理操作系统中,每个CPU(或核心)在一个时间点上只能处理一个进程。在进程运行时,它对CPU时间和资源分配的要求会不断变化,从而为进程分配一个状态,它随着环境要求而改变。
-
R运行状态(runing): 表明进程要么在运行中要么在运行队列里,并不意味着进程一定在运行中。
-
S睡眠状态(sleeping):意味着进程在等待事件的完成(这里的睡眠有时候也叫做可中断睡眠)
-
D磁盘睡眠状态(Disk sleep): 有时候也叫做不可中断睡眠,在这个状态的进程通常会等待IO的结束
-
T停止状态(stopped):可以通过发送SIGSTOP信号给进程来停止(T)进程。这个被暂停的进程可以通过发送SIGCNT信号让进程继续运行。
-
Z僵尸状态(zombie):通知父进程回收所有的资源
-
X死亡状态(dead):这个状态只是一个返回状态,你不会在任务列表里看到这个状态。
- 僵尸进程:当一个进程fork一个子进程之后,如果子进程退出,而父进程没有利用wait 或者waitpid 来获取子进程的状态信息,那么子进程的状态描述符依然保存在系统中。
- 孤儿进程:当一个父进程fork一个子进程之后,父进程突然被终止了,那么这个子进程就成为了一个孤儿进程,它会被init进程接管
查看进程
ps命令
ps命令用于显示当前进程的状态
静态查看进程ps 注: ps -aux
不同于 ps aux
常用组合:aux
u:以用户为中心组织进程状态信息显示
a:与终端相关的进程;
x:与终端无关的进程;
[root@wdy ~]# ps -uax
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
用户 进程ID CPU占用 内存占用
VSZ:Virtual memory SiZe 虚拟内存集
RSS:ReSident Size 常驻内存集———其他的都可以放入交换内存中
TTY:执行的终端编号,直接w命令可以看到
STAT:进程状态
R:running
S:interruptable sleeping
D:uninterruptable sleeping
T:stopped
Z:zombie
+:前台进程
l:多线程进程
N:低优先级进程
<:高优先级进程
s:session leader
START:启动时间
TIME:运行占据cpu的累积时长
COMMAND:由哪个命令来启动的相关进程
常用组合:ps -ef
-e:显示所有进程
-f:显示完整格式程序信息
常用组合:ps -eFH
-F:显示完整格式的进程信息
-H:以进程层级格式显示进程相关信息
常用组合:eo,axo
自定义想要查询的字段值 -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm -axo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wcha n:14,comm
ni:nice值
pri:priority,优先级
psr:processor,CPU
rtprio:实时优先级
[root@wdy ~]# ps aux |less
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 193940 6416 ? Ss 9月09 0:07 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 9月09 0:00 [kthreadd]
USER 运行进程的用户
PID 进程ID
%CPU CPU占用率
%MEM 内存占用率
VSZ 占用虚拟内存
RSS 占用实际内存 驻留内存
TTY 程序运行的终端
STAT 进程状态 man ps(/STATE)
-
D:不可中断睡眠,将一直等待事件的发生或等待某种系统资源
-
R:运行
-
S:可中断睡眠 Sleep
-
T:停止的进程
-
Z:僵尸进程,不存在但暂时无法消除
- 每个进程在运行结束后都会处于僵死状态,等待父进程调用进而释放系统资源,处于该状态的进程已经运行结束,但是它的父进程还没有释放其系统资源
-
X:死掉的进程
-
W:没有足够的内存可分配
-
<:高优先序的进程
-
N:低优先序的进程
-
+:前台进程
-
l:多线程进程
-
s:主进程(先导进程),有子进程的进程
Ss s进程的领导者,父进程
S< <优先级较高的进程
SN N优先级较低的进程
R+ +表示是前台的进程组
Sl 以线程的方式运行
START 进程的启动时间
TIME 进程占用CPU的总时间
COMMAND 进程文件,进程名
[root@wdy ~]# ps aux --sort %cpu |less # 按照CPU使用率排序
[root@wdy ~]# ps aux --sort -%cpu |less
[root@wdy ~]# ps aux --sort rss |less
[root@wdy ~]# ps aux --sort -rss |less
[root@wdy ~]# yum -y install httpd
[root@wdy ~]# systemctl start httpd
[root@wdy ~]# ps auxf |grep httpd # 按照父子进程层级显示
[root@wdy ~]# ps -ef # 精简显示
自定义显示字段
[root@wdy ~]# ps axo user,pid,ppid,%mem,%cpu,command --sort -%cpu |less
查看指定进程的PID
[root@wdy ~]# cat /run/sshd.pid
[root@wdy ~]# ps aux |grep sshd
[root@wdy ~]# pgrep -l sshd
[root@wdy ~]# pidof sshd
查看进程树
[root@wdy ~]# pstree
yum install psmisc -y
pstree --help
pstree -p #可以列出进程的id
top命令
动态显示系统相关资源的管理器,有点类似于windows当中的任务管理器
top [选项]
选项:
-d:改变显示的更新速度,或是在交互式指令列(interactive command)按s
-c:切换显示模式,共有两种模式,一是只显示程序的名称,另一种是显示完整的路径的名称
-S:累积模式,会将已完成或消失的子进程(dead child process)的CPU time累积起来
-s:安全模式,将交互式指令取消,避免潜在的危机
-i:不显示任何闲置(idle)或无用(zombie)的进程
-n:更新的次数,完成后将会退出top
-b:显示模式,搭配'n'参数一起使用,可以用来将top的结果输出到文件内
交互模式快捷键
空格:立即刷新
P:根据CPU使用多少排序
T:根据事件、累计排序
q:退出top命令
m:切换显示内存信息
t:切换显示进程和CPU状态信息
c:切换显示命令名称和完整命令行
M:根据内存的大小排序
W:将当前设置写入~/.toprc文件中,这是top配置文件推荐方法
N:以PID的大小排序
z:彩色
[root@wdy ~]# top
[root@wdy ~]# top -d 1 # 一秒钟刷新一次
[root@wdy ~]# top -c #显示完整命令
[root@wdy ~]# top -n 2 # 更新两次后终止更新显示
[root@wdy ~]# top -d 1 -p 6995 # 查看指定PID
[root@wdy ~]# top -d 1 -p 6995,1 # 查看多个PID进程
[root@wdy ~]# top -d 1 -u apache # 查看指定用户的进程
[root@wdy ~]# top -b -n 2 > top.txt # 将2次top信息写入到文件
第1行:系统时间、运行时间、登录终端数、系统负载(三个数值分别为1分钟、5分钟、15分钟内的平均值,数值越小意味着负载越低)。
第2行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。
第3行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。
第4行:物理内存总量、内存使用量、内存空闲量、作为内核缓存的内存量。(buffer和cache之间的区别,cache是提高cpu和内存之间的数据交换速度,buffer是io设备和存储设备之间的缓冲区)
第5行:虚拟内存总量、虚拟内存使用量、虚拟内存空闲量、已被提前加载的内存量。
进程信息
h|? 帮助
1 cpu展开
M 按内存的使用排序
P 按CPU使用排序
N 以PID的大小排序
R 对排序进行反转
f 自定义显示字段
1 显示所有CPU的负载
k 输入信号
< 向前
> 向后
z 彩色
W 保存top环境设置 ~/.toprc