进程基本概述
什么是进程?
进程其实就是正在被运行的程序。
程序和进程的区别
程序:是数据和指令的集合。是一个静态的概念,可以永久存储在系统中。
进程:是一个动态的概念,表示程序运行的过程,当我们结束该进程,进程就随之被销毁。
进程的生命周期
进程的生命周期表示进程在系统中的存活时间。
一个进程的上一级进程叫做父进程,用pid表示。
一个进程的下一级进程叫做子进程,用ppid表示。
僵尸进程
表示子进程在处理代码过程中异常退出,但是父进程却没有回收子进程,这样的进程便是僵尸进程。僵尸进程的存在会导致子进程虽然实体已经消失,但仍然在进程表中占据一条记录,长期这样会导致系统资源的浪费。僵尸进程无法被常规手段清理,只能通过重启来清理。
孤儿进程
表示子进程在处理代码的过程中,父进程退出了,那么这些子进程就没有父进程来管理了,由系统的system进程管理,这样的进程叫做孤儿进程。
监控进程状态
查看进程的状态分为静态和动态两种方式。
静态表示查看某一时刻的进程状态,动态表示实时监控进程状态。
PS
静态监控进程。
我们可以使用ps -aux来查看进程的状态,执行完成后会包含这些信息:
[root@oldboy ~]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.6 128248 6876 ? Ss 08:30 0:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 08:30 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 08:30 0:00 [ksoftirqd/0]
上面信息中各列代表的意思是:
USER: 运行该进程的用户(每一个进程都需要一个特定的用户身份来运行)
PID: 进程id
%CPU: 占用CPU百分比
%MEM: 占用内存百分比
VSZ: 虚拟内存,单位KB
RSS: 实际使用内存
TTY: 运行进程的终端 ?:表示该进程是系统运行的。
STAT: 进程的状态。(运行 暂停 停止 ……)
基本进程状态:
R:进程运行。
S:可中断进程。
T:进程被暂停。
D:不可中断进程。
Z:僵尸进程。
s:进程是控制进程。
<:进程运行在高优先级上。
N:进程运行在低优先级上。
+:进程在前台运行。
l:多线程进程。
常见的进程组合状态:
R+:在前台运行的进程。
Ss:父进程。
S+:进程正在前台运行并且是一个可中断进程。
Ssl:父进程是一个多线程进程。
START: 启动时间。
TIME: 进程占用CPU的总时间。
COMMAND: 进程运行的具体命令。这一列下面的内容中,带有[]的进程表示系统内核的进程。
top
动态监控进程。
执行完成后会包含这些信息:
[root@oldboy ~]# top
top - 11:20:06 up 2:49, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 106 total, 1 running, 105 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0
KiB Mem : 995896 total, 693820 free, 141720 used, 160356 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 680284 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
7819 root 20 0 0 0 0 S 0.3 0.0 0:00.48 kworker/+
7823 root 20 0 161980 2204 1556 R 0.3 0.2 0:00.14 top
上面的内容的意思分别是:
top - 11:20:06 up 2:49, 1 user, load average: 0.00, 0.01, 0.05
# 11:20:06启动,系统已经运行了2小时49分钟,当前有1个用户登陆系统,1分钟的负载情况是0.00,5分钟的负载情况是0.01,15分钟的负载情况是0.05
Tasks: 106 total, 1 running, 105 sleeping, 0 stopped, 0 zombie
# 一共有个106个进程被运行,1个正在被运行,105个中断的进程,0个被停止的进程,0个僵尸进程
%Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0st
# us:用户进程占用cpu百分比 sy:内核进程占用cpu百分比
# ni: 优先级高的进程占用cpu百分比
# id:空闲的百分比
# wa:等待。这一项数值较大的话说明用户请求磁盘资源,磁盘很慢,请求的资源很多。
# hi:硬中断 si:软中断
# st:虚拟机占用当前物理服务器的CPU资源的百分比。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
# PID:进程id USER:运行进程的用户
# PR:进程优先级 NI:负值表示高优先级,正值表示低优先级
# VIRT:共享内存 RES:进程使用的、未被换出的物理内存大小
# SHR:共享内存大小 S:进程状态
# %CPU:占用CPU百分比
# %MEM:占用内存百分比
# TIME+:进程使用CPU的时间
# COMMAND:进程运行的具体命令
top常用指令
h:查看帮助
1:显示所有CPU的核心的负载
z:以高亮显示数据
b:高亮显示处于R状态的进程
M:按内存使用的百分比排序输出
P:按CPU使用百分比排序输出
q:退出top
中断
中断是用来响应硬件设备请求的一种机制,他会打断进程的正常调度和执行,然后调用内核中的中断处理程序来响应设备的请求。
由于中断程序会打断其他程序的运行,为了减少对正常进程运行调度的影响,中断处理程序就需要尽可能快地运行。如果中断要处理的事情很多,会导致中断处理程序中断时,还会临时关闭中断。这就导致上一次中断没完成之前,后面出现的中断再次出现可能会导致后面出现的中断丢失。
我们的系统为了防止上述情况发生,把中断分成了两个部分,上半部和下半部。
上半部表示直接处理硬件请求,也就是我们常说的硬中断,特点是快速执行。
下半部由内核出发,也就是我们常说的软中断,特点是延迟执行。
举个例子:
1.用户发起上传操作
2.会触发一次硬中断将网卡接收的数据载入到内存
3.硬中断处理完毕后,会通知内存,唤醒软中断
4.软中断可以按照网站协议zhai,进行数据解析和处理
5.最终数据会被送往对应的应用程序,或送往存储设备。