欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

系统学习---- Linux进程管理

程序员文章站 2022-04-27 17:29:06
...


首先需要了解一些概念:
系统调用(system call): 运行在用户空间的程序向操作系统内核请求系统资源
(获得更高权限);系统调用提供给用户程序与操作之间的接口

系统学习---- Linux进程管理

内核程序进程管理,文件系统,网络功能,内存管理,驱动程序等等
程序: 通常是个二进制程序,放置存储介质中(内存/硬盘等),以实体文件存在

进程

进程:正在运行的程序;进程获取到的系统资源由执行者决定;程序(代码)会被加载到内存执行。
操作系统会给每个进程分配一个内存单元(识别码)。

进程的定义:

程序运行的实例,系统上的每个程序都会运行在进程的上下文中

进程出现的目的:

是为了更好的利用CPU资源。进程拥有独立的内存空间;对我们来看:进程好似独占CPU,实际上涉及上下文件的切换。
举例:
A执行任务(读取磁盘数据),CPU会空闲;B想要执行任务,需要等待,就造成资源浪费。
当有了进程之后
A执行任务(读取磁盘数据),进行"上下文件切换"(A需要保存当前进程状态);B可以直接执行任务,当A任务完成后,B将cpu占用还给A (恢复A之前进程状态
下图有 A 和 B 进程,在一个时间点,CPU 只执行一个进程的指令,因为 CPU 运行很快,所以在咱们看起来,像是多个进程在同时跑。这就是进程带来的好处:提高资源利用率,并发地执行多个程序。
系统学习---- Linux进程管理

进程的创建:

INIT进程: PID为(1|0)的父进程
父子进程: 进程都是由其父进程创建的(调动fork()函数)

进程优先级:

0-99: 实时优先级,数字越小,优先级越低
100-139: 静态优先级,数字越小,优先级越高。表现形式:通过Nice值(-20,19),例如Nice值为0,静态优先级为120

进程类型:

前台进程:跟终端相关,通过终端启动的进程
守护进程:在系统引导过程中启动的进程(也可以自定义守护进程: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 : 以用户为中心组织进程状态信息显示

常用组合: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命令:向进程发送控制信号,以实现进程管理

显示当前可用信号: 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] [-p|–pid] …
renice [-n] -g|–pgrp …
renice [-n] -u|–user …

	[aaa@qq.com ~]# renice -n 5 -p 2310 
	2310 (process ID) old priority 0, new priority 5
相关标签: 系统