linux(十四)程序和进程的深入研究
Posted 云来云去-起飞
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux(十四)程序和进程的深入研究相关的知识,希望对你有一定的参考价值。
目录
一、程序和进程的基础知识
1.1.程序和进程的关系
- 程序
保存在硬盘,光盘等介质中的可执行代码和数据
静态保存的代码
- 进程
在cpu及内存中运行的程序代码
动态执行的代码
父、子进程
每个程序可以创建一个或者多个进程
- 僵尸进程:占用资源,却无法正常运行工作的进程
- 孤儿进程:无父进程
1.2.进程状态
- 可运行状态
- sleep状态
可中断sleep状态
不可中断sleep状态
- 僵死状态
- 停止状态
- 已死状态
- 详述僵尸进程
产生原因:子进程先于父进程退出,父进程(使用wait()系统调用)没有读取到子进程退出的返回代码,这时候子进程为了保存退出原因,因此进入僵死态不会释放所有资源。僵死进程会以终止状态 保持在进程表中,并且会⼀直在等待父进程读取其退出状态代码。
危害:维护退出状态本身就是要用数据维护,也属于进程基本信息,所以保存在task_struct(PCB)中,假如⼀个父进程创建了很多子进程,但是不回收,就会造成内存资源的浪费,资源泄露。
- 详述孤儿进程:
同僵尸进程相反,假如父进程先于子进程退出,子进程便进入后台运行,成为孤儿进程,孤儿进程随后会被1号init进程领养并回收,也就是将其父进程变为init进程。
注:cpu 同一时刻只能执行一个进程,cpu时间片是cpu在处理某个进程的运行时间
二、命令解析
2.1.ps 命令
ps 描述:linux系统中常用的进程查看工具,主要用于显示包含当前运行的各进度完整信息的静态快照。
ps 选项
ps 命令解析 | |||
序列 | 命令选项 | 描述 | 案列 |
1 | -a | 所有终端下的所有信息,除了当前用户还有其他用户 | ps -aux | grep "zhou" 查看字样带zhou的进程 |
2 | -u | 使用以用户为主的格式输出进程信息,当前用户 | |
3 | -x | 显示当前用户所有终端下的进程信息 | |
4 | -e | 显示系统内的所有进程信息 | ps -elf 查看所有的进程,以长格式显示进程信息 |
5 | -f | 使用完整的格式显示进程信息 | |
6 | -l | 使用长格式显示进程信息 | |
7 | -o | 指出输出字段 | |
8 | pstree | 查看进程数,能更直观的判断各进程的父子关系,systemd是系统第一个进程,pid为1 其他皆为其后代。 | pstree -a 显示所有 pstree -u zhou 找到zhou用户下所有进程 pstree -p 列出所有进程对应id pstree -p zhou 列出zhou用户下进程对应id pstree -l bash 显示bash的进程号 |
2.1.1.针对查询结构进行补充
- ps -aux
+ 为前台进程
tty1 图形化界面
tty2 命令界面
CTRL +ALT F1 图形界面,以此类推
START 进程触发时间
TIME 一共占用cpu时间
%cpu 占用率
%mem 内存占用率
command 进程: 带【】为内核态的进程 ,不带【】为用户态的进程
- ps -elf | head
PRI 为优先级,越小越优先(不可修改)
NI nice 可以改变优先级
以上两个组合成为进程优先级
-
ps -ef | head
注意两点:
ps -ef 会显示PPID,0表示没有父进程
ps e 会连环境变量都显示,如图
-
ps axo 自定义所需要的显示的参数
ps axo user,pid
2.2.TOP命令
2.2.1.描述
- 使用ps命令查看到的是静态的进程信息,并不能连续的反馈当前进程的运行状态,如果希望以动态刷新的方式显示各进程的状态信息,就可以使用top命令。
- 默认每3秒刷新一次,类似于Windows系统的任务管理器
2.2.2 查询结果分析
- 如图
- 如上图所示解析:
up:开启时间为4天,
load average: cpu平均负载 00 为1min的平均 , 0.04是5min ,0.47是15min
5 users :5个用户数
查看cpu方式
grep 'model name' /proc/cpuinfo | wc -l -----查看cpu核数
cat /proc/loadavg ----查看负载
uptime ---查看负载
w ---查看负载均衡
total:进程总数,running:正在运行的进程数,sleeping:睡眠的进程数,stopped:停止的进程数,zombie:僵尸进程数
us:用户空间占用CPU百分比
sy:内核空间占用CPU百分比
ni:用户进程空间内改变过优先级的进程占用CPU百分比
id:空闲CPU百分比
wa:等待输入输出的CPU时间百分比
hi:硬中断(Hardware IRQ)占用CPU的百分比
si:软中断(Software Interrupts)占用CPU的百分比
st:虚拟机占用百分比
total:物理内存总量,free:空闲内存总量,used:使用的物理内存总量,buff/cache:用作内核缓存的内存量
total:交换分区总量,free:空闲交换分区总量,used:使用的交换分区总量,avail mem可用于进程下一次分配的物理内存数量
pid:进程id,user:用户,pr:优先级 ,ni为nice值,和pr配合调整优先级,VIRT :分配的虚拟内存大小,RES:占用物理内存大小 ,SHR:内存共享大小。
2.2.3.top的按键命令
- M 按内存 排序
- P 按CPU 排序
- N 按PID 排序
- z 变更颜色
- 1 显示所有cpu
- q 突出
2.2.4.top 拓展命令
- top -d 5 设置时间
- top -p 进程名或者pid
2.3.pgrep 命令
- 查看用户下的进程号
- 查看用户下的进程号和进程名
2.4.kill 命令
- kill -1 重启
- kill -9 直接杀死
- kill -15 正常停止
- killall 通过名称去杀
- pkill -9 进程名称 :如pkill -9 -f "ping 8.8.8.8"
- pkill -u 指定用户: 如pkill -u mark
- pkill -HUP nginx
三、进程控制
- vim 编辑的时候,可以在命令模式下ctrl + z 调到后台,
- 后台启动:在命令行尾加入“&”符号
- jobs命令:查看后台进程命令
- fg+任务号命令,将后台命令放到前台
- 继续放在后台运行bg +任务号
- kill -9 %1 杀死后台任务,1表示
- 案列如下:
以上是关于linux(十四)程序和进程的深入研究的主要内容,如果未能解决你的问题,请参考以下文章