文章目录
进程的简介和查看
简介
什么是进程?
操作系统中最核心的就是进程,简单来说进程就是在操作系统中运行着的程序,它是操作系统资源管理的最小单位。
进程的生命周期
由系统程序,fork(复刻)出来的子程序。具备一定父的资源(权利,内存,PID)直到运行完毕,退出系统。
程序,进程,线程的含义和关联
程序:保存在硬盘、光盘等介质中的可执行代码和数据,是静态保存的二进制文件。
进程:是在CPU及内存中运行的程序代码。
线程:进程中的实际运作单位
通过三者的含义我们可以看出之间的联系,就像是一条流水线,开工的时候就是进程,停工的时候就是程序,而流水线上的每个人工人就是一个个线程。
线程的三种状态
就绪:在创建线程后等待CPU过来执行的时间
运行:当CPU过来执行时,执行完了变成就绪
阻塞:如果线程正在运行中而又发生了需要向硬盘发送访问请求等需要耗时输入输出的擦做事就会进入阻塞状态。CPU就会转而执行其他线程,等耗时结束后,又变成就绪状态
单核单线程的cpu能运行包含多线程的应用程序么?
可以。如果线程在运行中而又发生了需要向硬盘发送访问请求等一系列需要耗时输入输出的操作时,线程就会进入阻塞状态,cpu就会转而执行其他的线程,等到耗时结束后,之前阻塞的状态就会变成就绪状态,而单核单线程cpu一次只能执行一个线程那就需要对每个线程轮流执行操作。而每单个计算的时间称为cpu的时间片,实际时间只有几十毫秒非常短,因此就算是单核单线程cpu也可利用自身速度去完成多线程的程序所发布的任务。
查看进程
查看静态的进程统计信息:PS命令
方法一:
ps -aux #以简单列表的形式显示出进程信息
-a:显示当前终端下的所有进程信息,包括其他用户的进程。与“x”选项结合时将显示系统中所有的进程信息。
-u:使用以用户为主的格式输出进程信息。
-x:显示当前用户在所有终端下的进程信息。
显示如下:
上述输出信息中,第一行为列表标题,其中各字段的含义描述如下:
USER:启动该进程的用户账号名称
PID:该进程在系统中的数字ID号,在当前系统中是唯一的。
%CPU:CPU占用的百分比。
%MEN:内存占用的百分比。
VSZ:该进程占用的虚拟内存量。
RSS:该进程占用的物理内存量。
TTY:表明该进程在哪个终端上运行。pts是指远程登录终端;tty1是图像界面,2-6是字符界面;不是从终端启动的进程则显示为?,是系统自身执行的进程。
STAT:该进程的状态。(标志位1:D:不可中断的状态,系统守护进程,后台进程S:休眠状态,可被唤醒T:停止状态,可能是后台暂停或跟踪调试状态Z:僵尸进程,进程已经终止,但是部分程序还在内存中R:运行中)(标志位2:<:表示进程运行在高优先级上N:表示进程运行在低优先级上L:表示进程有页面锁定在内存中s:表示进程是控制进程l:表示进程是多线程的+:表示当前进程运行在前台)
START:进程开始的时刻
TIME:占用CPU时间
COMMAND:启动该进程的命令的名称
方法二:
ps -elf #已长格式显示系统中的进程信息
-e:显示系统内所有进程信息
-l:使用长格式显示
-f:使用完整格式显示
显示如下:
各列的解释
F:内核分配给进程的系统标记
S:进程状态
UID:启动这些进程的用户
PID:进程的进程号
PPID:父进程的进程号
C:进程生命周期中的CPU利用率
PRI:进程的优先级(数字越小越高)
NI:谦让度(参与决定优先级)
ADDR:进程的内存地址
SZ:如果进程被换出,所需交换空间大小
WCHAN:若该进程在睡眠,则显示睡眠中的系统函数名
STIME:进程启动时的系统时间
TTY:进程启动时的终端设备。(pts/0-255 代表虚拟终端,tty1-7代表本地控制台终端)
TIME:运行进程需要的累计CPU时间
CMD:进程的启动命令
查看动态进程信息:top命令
各列含义
上半部分
第1行
top-10:00:00 up 10:00 4users load average:0.1,0.1,0.1
程序名-系统时间 运行时间 登录用户数 CPU负载:1分钟 5分钟 15分钟
(uptime命令:查看cpu负载)
第2行
Tasks:176 total 1running 175sleeping 0stopped 0zombie
总进程数:176个 1个正在运行 175个休眠 0个中止 0个僵尸
第3行
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0hi, 0.0st,
Cpu占用信息 用户 内核 优先级调度 空闲 I/O等待 硬件 虚拟化
第4行
KiB Mem: 100total, 10free, 50used, 20buff/cache
内存占用 总空间 空闲空间 已用内存 缓存硬盘内容
第5行
KiB Swap: 100total, 10free, 50used, 20avail Mem
交换空间占用 总空间 空闲空间 已用空间 可用物理空间
下半部分
PID:进程号
USER:用户
PR:优先级(由内核决定)
NI:进程优先级,负高正低
VIRT:虚拟内存(进程所需要的的所有内存,不是实际的)
RES:常驻内存(实际使用内存)
SHR:共享内存大小(物理内存大小计算公式=RES-SHR)
S:进程状态
%CPU:上次更新到现在的CPU时间占用比
%MEM:进程使用的物理内存百分比
TIME+:进程使用的CPU时间总计,单位1/100s
COMMAND:命令名/命令行
交互快捷键
P:按消耗CPU资源排序
M:按消耗内存资源排序
T:按时间排序
数字键1:显示每个内核的CPU使用率u/U:指定显示的用户
h:可以获得TOP在线帮助信息
q:正常退出top程序
top -p PID 可单独监控该PID进程的状态
关闭耗能高的进程
1)按k键 显示CPU占比最高的进程
2)列表上方出现“PID to signal/kill [default pid = 0000]:”
3)输入进程的PID号按回车
4)出现“Send pid 5597 signal [15/sigterm]”的二次确认的提示信息
5)再按回车确认即可关闭
pgrep命令:查询进程信息
pgrep [选项] 进程名:显示进程的PID
-l:同时输出对应进程名和PID
-U [用户名]:查询特定用户的进程
-t [终端号]:查询在特定终端运行的进程
例:pgrep -l -U root -t tty1 vim
pstree命令:以树形结构列出进程信息
-p:同时列出对应PID
-u:列出对应用户名
-a:列出完整的命令信息
jobs命令:查看处于后台的任务列表
jobs -l:可同时显示对应的PID
僵尸进程
一个进程结束了,但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程,因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init来接管它,成为它的父进程,子进程退出后init会回收其占用的相关资源。但是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。
jobs -l:可同时显示对应的PID
僵尸进程
一个进程结束了,但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程,因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init来接管它,成为它的父进程,子进程退出后init会回收其占用的相关资源。但是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。
END