一、程序,进程,线程
linux程序:系统,用户,固件
- 程序:一组指令以及参数集合,按照相应的逻辑控制计算机完成特定任务
程序==>系统调用==>缓存(内存)==>cpu处理 执行任务
特点:静态的,封闭的
- 进程:运行的程序,动态。操作系统上的基本单位,有生命周期
程序==>运行==>进程1,进程2,....
特点:并发性,交互性
应用(应用程序)
|
内核(内核文件,内核模块,驱动程序)
| 固件(芯片+程序;)
硬件
特点: 操作系统以进程为单位分配系统资源
每一个进程运行时独立的
具有独立的地址空间,运行状态
多个程序同时运行,每一个程序就是一个进程
- 线程:
一个进程中可有多个线程,而一个线程只能被一个进程所拥有,(linux的进程,线程都有一个独立的资源集)
每一个线程都有程序的入口,序列,出口
线程无法独立运行
- 父进程和子进程
父进程--->子进程--->子进程
子进程拥有父进程的资源,权限
运行自己的程序。(exec)-->exit
从而唤醒父进程,清理剩余的结构,然后继续执行自己的程序代码,子进程变成僵尸进程
- 进程的生命周期---五种基本状态
二、进程的管理工具
- pstree 进程树 查看进程之间的关系
-p 显示pid
-u 显示用户
-A各进程树之间以ASCIIma字符连接
- ps
-a 显示终端下的所有进程
-u 显示以用户为主的进程
-x 与au配合使用,显示完整信息
-l 较长、较详细的将该PID的信息列出
F | 程序的旗标,4代表使用者为superuser |
S | 程序的状态 |
UID | 执行者的身份 |
PID | 进程的ID号 |
PPID | 父进程的ID |
C | CPU使用的资源百分比 |
PRI | 进程的执行优先权,越小越早被执行 |
NI | nice值,优先级的修正数值 |
ADDR | 指出程序在内存的那个部分 |
SZ | 使用的内存大小 |
WCHAN | 目前程序是否在运作中 |
TTY | 登入者的终端机位置 |
TIME | 使用掉的CPU时间 |
CMD | 所下达的指令名称 |
- pgrep
① -l 同时显示进程名和PID
② -o 当匹配多个进程是,显示进程号最小的
③ -n 当匹配多个进程是,显示进程号最大的
注:父进程号<小于子进程号
- kill killall pkill
-9 强制杀死进程
-w 等待进程死亡
-l 列出已知信号
-u 指定用户名
kill 选项 pid
- htop 监控界面
①安装epel源
②yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
③yum install htop -y
F1 | 显示帮助信息 |
F2 | 配置界面中显示信息 |
F3 | 搜索进程 |
F4 | 过滤器搜索 |
F5 | 以属性方式显示 |
F6 | 排序方式 |
F7 | 调小进程nice |
F8 | 调大进程nice |
F9 | 杀死进程 |
F10 | 退出htop |
- 杀死进程httpd 中pid为1613的进程
F9
选中9 回车
- vmstat linux监控工具
r | 等待执行的任务数 |
b | 等待IO的进程数量 |
swpd | 正在使用虚拟的内存大小,单位k |
free | 空闲内存大小 |
buff | 已用的buff大小,对块设备的读写进行缓冲 |
cache | 已用的cache大小,文件系统的cache |
nact | 非活跃内存大小 |
active | 活跃的内存大小 |
si | 每秒从交换区写到内存的大小 |
so | 每秒从内存写到交换区的大小 |
bi | 每秒读取的块数 |
bo | 每秒写入的块数 |
in | 每秒中断数,包括时钟中断 |
cs | 每秒上下文切换数 |
Us | 用户程序执行消耗cpu时间 |
sy | 系统进程消耗cpu时间 |
ld | 空闲时间 |
wa | 等待IO时间 |
参数:
每两秒采取一次,一共采取5次
-V 显示vmstat
-n 只在开始时显示一次个字段名称
-a 显示活跃和非活跃内存
-d 显示各个磁盘相关统计信息
-D 显示指定磁盘总体信息
-s 显示内存相关统计信息及多种系统活动数量
-m 显示slabinfo
-t 在输出信息的时候也将时间一并输出出来
-s 使用指定单位显示 默认单位为k
delay 刷新时间间隔。如果不指定,只显示一条结果
count 刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这次刷新次数为无穷
- lsof 文件句柄
参数:
-c abc | 显示以字母abc开头的进程打开的文件 |
-p 123 | 列出进程号为123的进程所打开的文件 |
-g gname/gid | 显示归属gname或gid的进程情况 |
-u uname/uid | 显示归属uname或uid的进程情况 |
+d /usr/local | 显示目录下被进程开启的文件 |
+D /usr/local | 显示目录以及目录下被进程开启的文件 |
-d 4 | 显示使用fd为4的进程 |
-i |
显示符合条件的进程 |
- 查看端口为80的进程
- 列出所有tcp网络连接的信息
- 列出PID为4的进程信息
- 显示目录以及目录下被进程开启的文件
- 显示目录下被进程开启的文件
三、进程优先级
0-99 有效的实时优先级/实时进程的实时优先级
100-139 非有效的实时优先级/用户态的实时优先级/静态优先级
值越小优先级越高
- top
PR=静态优先级-100 ;-20映射到0,+19映射到39
相对优先级NI=nice -20~19
- 修改nice值
①top==>r==>输入PID==>输入优先级数字nice值NI
修改PID为7的nice值
② renice [-20,19]PPID
③htop F7为减,F8为加
- 使用ps查看nice级别并降序排序
ps axo pid,command,nice,pri --sort=-nice
- 进程的状态
sleeping ---睡眠状态
stopping --- 停止状态
running --- 运行状态
zombie --- 僵死状态
实时变化
- 进程在前后台的运行
①在前台一次只能运行一次作业
②在后台可以运行多个
* egrep=grep -E
* ps -ef grep -E "ping|sleep" 查询ping 和skeep 进程
例:ping 192.168.253.26> /dev/null >2&1 & 把ping的结果放到/dev/null 放到后台运行
ping 192.168.253.26 & 已经在后台运行,在前台输出结果
- jobs 查看后台进程和终端
- sleep 3000 & 进程后台进行
ctrl+z 把进程挂起
bg %1 把后台作业1运行
fg %1 将作业1调回到前台
kill %1 先停止作业1,再杀死
杀死作业2