Linux系统学习(五)
- Linux进程管理
系统调用(system call): 运行在用户空间的程序向操作系统内核请求系统资源
(获得更高权限);系统调用提供给用户程序与操作之间的接口
内核功能:进程管理,文件系统,网络功能,内存管理,驱动程序等等
程序: 通常是个二进制程序,放置存储介质中(内存/硬盘等),以实体文件存在
进程:正在运行的程序;进程获取到的系统资源由执行者决定;程序(代码)会被加载到内存执行
操作系统会给每个进程分配一个内存单元(识别码)
- 进程的定义:程序运行的实例,系统上的每个程序都会运行在进程的上下文中
- 进程出现的目的:是为了更好的利用CPU资源
举例: A执行任务(读取数据);B想要执行任务,需要等待CPU资源空闲;当有了进程之后
A执行任务(读取数据),进行"上下文件切换"(A需要保存当前进程状态);
B可以直接执行任务,当A任务完成后,将cpu占用还给A (恢复A之前进程状态)
- 进程拥有独立的内存空间;对我们来看:进程好似独占CPU
线程
协程
进程创建:
INIT进程: PID为(1|0)的父进程
父子进程: 进程都是由其父进程创建的(调动fork()函数)
进程优先级:
0-99: 实时优先级,数字越小,优先级越低
100-139: 静态优先级,数字越小,优先级越高
表现形式:通过Nice值(-20,19)
进程类型:
前台进程:跟终端相关,通过终端启动的进程
守护进程:在系统引导过程中启动的进程(也可以自定义守护进程:daemon()),跟终端无关
Note: 前台进程也可以发往后台,以守护进程模式运行
进程状态:
运行态:running
就绪态:ready
睡眠态:
可中断: interruptable
不可中断: uninterruptable
停止态:stopped 暂存于内存中,但是不会被调度,除非手动启动
僵尸态:Zombie
僵尸进程:简单来说:就是有些进程已经运行完结束,但是占用的系统资源没有被回收
进程分类:
CPU - Bound
IO - Bound : 不占用cpu
- 进程管理工具: ........
pstree命令:显示进程树
常用参数:
-g : 显示子进程Pid
-p :显示Pid号
-s :显示父进程信息
ps命令: report a snapshot of the current processes (输出当前系统进程信息)
- Linux系统各进程的相关信息均会保存到/proc/PID/目录的各文件中
常用组合:aux
a : 与终端相关的进程
x :与终端无关的进程
u : 以用户为中心组织进程状态信息显示
USER PID %CPU %MEM
用户 pid号 CPU占用情况 内存占用情况
VSZ :虚拟内存集
RSS :常驻内存集
TTY :终端
STAT : 进程状态
R: Running
S: interruptable
D: uninterruptable
T: stopped
Z: Zombie
+: 前台进程
l: 多线程进程
N:低优先级进程
<: 高优先级进程
s: session leader
START : 启动时间
TIME :运行占用CPU的累积时长
COMMAND :由哪个命令来启动的相关进程
常用组合2:ps -ef
e : 显示所有进程
f :显示完整格式程序信息
常用组合3:ps -eFH
F : 显示完整格式进程信息
H : 以进程层级格式显示进程相关信息
常用组合4:ps eo, axo (输出自定义信息)
To see every process with a user-defined format:
ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
ps -Ao pid,tt,user,fname,tmout,f,wchan
自定项: STANDARD FORMAT SPECIFIERS(man手册中这一段帮助文档)
top命令: 实时显示Linux processes
top - 02:43:53 up 48 min, 1 user, load average: 0.00, 0.01, 0.05
02:43:53 up 48 min : 开始运行的时间 up 当前已经运行的时间
1 user : 登录用户数量
load average: 0.00, 0.01, 0.05 : CPU平均负载; 1|5|15分钟的平均负载信息(uptime命令也可)
Tasks: 121 total, 2 running, 119 sleeping, 0 stopped, 0 zombie
进程任务数量 正在运行状态 睡眠状态 停止状态 僵尸状态
%Cpu(s): 0.0 us, 0.1 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
cpu占用相关信息:
us: 表示用户态的CPU时间比例
sy:表示内核态的CPU时间比例
ni:运行低优先级进程的CPU时间比例
id:空闲CPU时间比例
wa:处于IO等待的CPU时间比例
hi hard interrupt: 处理硬中断的CPU时间比例
si soft interrupt: 处理软中断的CPU时间比例
st steal:当前系统运行在虚拟机中的时候,被其他虚拟机占用的CPU时间比例
KiB Mem : 997980 total, 539524 free, 100820 used, 357636 buff/cache
内存 总量 空闲 使用量 buffer/cache 可用量
KiB Swap: 2097148 total, 2097148 free, 0 used. 711396 avail Mem
交换内存 总量 空闲量 使用量 可用量
内置命令:
排序:
P: 以占用CPU百分比排序
M: 以占用内存百分比排序
T: 以累积占用CPU时长排序
首部信息提示:
uptime信息: l命令
task及cpu信息: t命令
CPU分别显示信息: 1(数字)
memory信息: m命令
修改刷新时间间隔: s 命令(默认是3s刷新一次)
终止指定进程:k命令
退出命令: q命令
选项:
-d #:指定刷新时间间隔 默认为3s
-b:以批次方式显示
-n #:显示多少批次
htop命令:
内置命令:
s:跟踪选定进程的系统调用
l:显示选定进程打开的文件列表
[: 将选定的进程绑定至某个指定的CPU核数上
选项:
-d #: 指定延迟时间
-u username: 仅显示指定用户的进程
-s CLOOMN: 以指定的字段进行排序
vmstat命令:
-n [延时|次数] : 每个多长时间输出一次;一共输出n次
-s : 显示内存统计信息
vmstat 5 2
输出信息:
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 535084 2108 357696 0 0 14 7 26 24 0 0 100 0 0
r: running
b: uninterruptable
swapd: 交换内存总量
...
si: 数据进入swap中的速率
so:数据离开swap中的速率
bi:数据从块设备到系统的速率
bo:数据从系统到块设备的速率
in:interrupts 中断速率
cs: context switch 上下文切换速率(进程切换速率)
kill命令:向进程发送控制信号,以实现进程管理
显示当前可用信号: kill -l
常用信号:
1) SIGHUP : 让进程无需退出而重新读取配置文件
2) SIGINT : 终止正在运行的进程
9) SIGKILL:杀死正在运行的进程
15) SIGTERM: 终止正在运行的进程
指定信号的方式:
信号的数字标识(*)
信号的完整名称
信号的简称
向进程发起信号:
kill [-Signal] PID
终止"名称"之下的所有进程
killall [-Signal] Promgram
进程优先级调整:
静态优先级: 100-139 可以手动修改
进程默认启动时的nice值为0,优先级120
修改:
nice命令:Usage: nice [OPTION] [COMMAND [ARG]...]
renice命令:
Usage:
renice [-n] <priority> [-p|--pid] <pid>...
renice [-n] <priority> -g|--pgrp <pgid>...
renice [-n] <priority> -u|--user <user>...
[ ~]# renice -n 5 -p 2310
2310 (process ID) old priority 0, new priority 5