Linux进程管理

linux进程管理
进程是:运行的程序
资源的分配单元:内存资源、CPU资源、I/O资源
内核功能:进程管理
内核是通过资源分配来管理进程的

CPU资源是怎么分配的?
切割时间片,时间片轮转

进程间的切换:保存现场,尤其是指令指针,即下一条指令所在的地址

保存现场:
保存进程的元数据
进程的元数据:描述进程的属性
由内核追踪进程状态:保存现场即是将上一个进程的状态保存到内核中去
内核是一种特殊的数据结构存储进程的状态,即task_struct

恢复现场:
根据优先级来挑选

进程优先级(用于挑选下一个要运行的进程)
优先级:0-139
0-99:实时优先级 数值越大,优先级越高
100-139:静态优先级 数值越小,优先级越高
nice值,调整用户空间的优先值,范围为-20 19,对应的是100-139

不可能遍历所有的优先级,因为遍历也同样消耗CPU,而是逐个遍历140个优先级队列
进程间的切换是需要付出代价的

进程的状态
不可中断睡眠
僵死态:僵尸进程,定期扫描,并清除

进程永远是由父进程启动的
但第一个进程init是由内核创建的,是所有进程的父进程


进程间的通信:IPC
同一台主机间的进程通信:
信号: signal
共享内存:shm
旗语:semerphor
不同主机间的进程通信:
rps:远程过程调用(nfs就是通过这种方式通信的)
socket:套接字

pstree: 显示当前linux系统的命令树
ps:显示进程的状态
ps 选项
选项有两种风格,分别为带不带-

选项的常用组合:
ps aux 以用户为中心显示和终端有关和无关的所有进程
a 显示和终端相关的所有进程的信息
x 显示和终端无关的所有进程的信息
u 以用户为中心显示进程的状态
ps a
ps x
TIME: 为占用cpu的时间总和
ps ax
ps -ax
字段含义:
%CPU 执行命令的瞬间,cpu的使用率
%MEM 执行命令的瞬间,mem的使用率
VSZ:虚拟内存集
RSS:常驻内存集,即不允许交换出内存的大小
STAT: 进程的状态
R: running 运行态
S: 可中断睡眠态
D: 不可中断睡眠态
T: 停止态
Z: 僵尸态
s: 表示该进程为领导者进程,即prtree打印出的第一个进程
+:表示该进程为前台进程
l: 表示该进程为多线程进程
N: 低优先级进程
<: 高优先级进程
[]:表示这是一个内核线程

ps -ef
-e: 显示所有进程
-f: 显示完整格式

字段:
PPID: 为进程的父进程

ps -eFH
-F: 显示额外的信息
-H: 显示进程的层次结构

字段:
STIME: 开始时间

pgrep 进程过滤工具
-U uid 显示指定用户启动的进程
-t 终端 显示终端自己的pid
-l 显示进程pid的同时显示进程的名称
id apache
pgrep -U 48
pgrep -t tty1
pgrep -lU 48 48为-U的参数


pidof 根据进程名称获取该进程的pid号
pidof 进程名
pidof httpd

top 动态查看进程信息,且支持交互式操作
默认CPU使用率从高到低排序
shift+M: 内存使用率排序
shift+T: CPU累计时间占用率
shift+P: CPU累计时间占用率
1:单独显示每个CPU核心的负载情况

vmstat 知道即可

消息:signal 同一台主机间的进程通信

kill -l 列出进程间通信的种类

常用的signal:
1 SIGHUP 让程序重读配置文件,而无需重启进程
2 SIGINT 打断正在运行的进程 ctrl+c
9 SIGKILL 强制杀死一个正在运行的进程
15 SIGTERM 优雅杀死一个正在运行的进程
18 SIGCONT 将停止态的进程运行起来
19 SIGSTOP 将一个进程转变为停止态 ctrl+z

kill 手动向某个进程发送除SIGINT之外的其他信号
kill -信号 PID
信号的格式有:
-1
-SIGHUP
-HUP
kill PID 默认传递-15信号

killall 手动向某些进程发送信号
killall -信号 进程名称
killall httpd 默认传递-15信号

fg 将一个停止态的进程运行起来

原文地址:https://www.cnblogs.com/yajing-zh/p/4861705.html