linux基础笔记-7-进程管理

13.进程管理

开头说过,学习os,就是研究内核和内核上的众多进程。进程管理是内核的6大功能之一

mkdir为例,创建目录需要访问磁盘,而内核才能访问磁盘。mkdir进程在cpu上运行并通过system call向内核发出操作磁盘的申请,然后让出cpu,同时保存现场,cpu转给内核。
这一过程其实还是由内核管理的,内核追踪每一个进程的状态信息。

内核数据结构task structure保存了进程的很多信息,如ppid,pid,下一个该执行的进程。

进程可以分为:

  • 终端相关进程
  • 终端无关进程

tty 显示表示与终端无关。

/proc

/proc下有很多pid命名的目录,每个目录对应一个进程。

/proc目录下的文件是内核信息的映射,参数被映射为文件,所以是伪文件系统。例如,cat /proc/mem会显示错误。

两个重要文件:/proc/cpuinfo/proc/meminfo

cat /proc/1/maps可查看init内存信息

进程空间

80286 cpu之后,为了避免内存中一个程序覆盖另一个程序,把空间分为线性地址和物理地址,把内存分为页面。

MMU:内存管理单元,负责将页面对应到物理页框。是cpu子芯片。
每次转换后都保存到cache(联系lrlu策略)。
TLB(Translation Lookaside Buffer) 转换检测缓冲区是一个MMU,用于改进虚拟地址到物理地址转换速度的缓存。它和系统性能有关。

内核给进程找离散的页面,但进程认为是连续的页面。
学习swap时曾说过,32位系统,每个进程认为自己有4G(1G给内核)。

每个进程空间还有如下组成(由低位开始)
forbidden–只读文本(.text)–initialized data(.data)–uninitialized data(.bss)–heap–memory mapped region for shared lib–stack

[外链图片转存失败(img-VC2RnHU6-1566454615715)(http://r.photo.store.qq.com/psb?/V11kR0B91ocBaQ/vaJh8GePBSLVrwgwIb1M30iXqNOLLLMU9RMYF1LRuvs!/r/dC0BAAAAAAAA)]

进程占用空间有两种:

  • Virtual Memory Size(vss):0-stack,表示虚拟内存。
  • Resident Set Size(rss):表示相应进程在RAM中占用了多少内存,并不包含在SWAP中占用的虚拟内存。包括共享库占用的内存(只要共享库在内存中);

进程空闲时会进入睡眠状态,分2种:

  • interruptible:与io无关,有请求则唤醒。
  • uninterruptible:与io有关,外部资源没有被满足。

zombie僵尸进程:进程结束,但没有被父进程回收而释放内存。是内存泄漏的一种表现。

kill命令只能终止进程,而僵尸进程已经终止,所以不能被kill。

ps查看,状态Z+,中括号[]中的进程即僵尸进程,后面还带有。

init(pid=1)是内核生成的第一个用户级进程,是系统中所有其他用户进程的祖先进程,用来管理用户空间进程。pstree可查看。

Linux下有三个特殊的进程:idle进程(PID=0),init进程(PID=1),和kthread(PID=2)

父进程可以回收子进程的资源。

优先级

进程有优先级关系,例如,信号优先处理。

linux进程优先级0-139,越小越优先。

  • 0-99:内核调整
  • 100-139:用户可控;每个进程都有nice值,区间[-20,19],分别对应100-139,用来调整优先级。普通用户仅能调大nice值,管理员可以任意调整。

优先级高,则获得更多cpu运行时间,优先获得运行机会。

nice值可以用renice命令调整。

前后台

前台作业:占据命令提示符的。
后台作业:释放命令提示符,在默默完成后续操作。

ctrl+z挂起任务,即送往后台。
ctrl+z后任务便暂停,bg命令可以让后台作业继续运行。
fg命令:调回前台
CMD &直接后台运行

bgfg可以指定作业号
bg %JOBID,百分号用于区分pid,bg和fg不能操作进程,所以可省。如果是kill %JOBID就不能省了。

jobs查看后台作业,每个作业都有作业号.
+:表示bg命令的默认操作
-:第2个默认操作

IPC

  • 管道及命名管道
  • 消息队列
  • 共享内存
  • 信号量semaphore
  • 信号signal
  • socket

相关命令

ps,pstree,pgrep,pidof,top,vmstat,free,kill,pkill,bg,fg

ps(process state)

system v风格:选项有-

bsd风格:选项无-

ps默认只显示前台进程

stat进程状态有以下几种
R:运行或就绪
D:不可中断睡眠
S:可中断睡眠
T:停止
Z:僵死
<:高优先级
N:低优先级
+:前台进程组中的进程
l:多线程进程
s:会话进程首进程

bsd风格,常用aux
	a:显示所有终端相关进程
	u:显示用户
	x:显示所有终端无关进程

字段TIME表示运行时长,即真正占有cpu的时长。
COMMAND表示由哪个命令启动,中括号表示内核线程。
system v风格常用-elf
	-e | -A:显示所有进程
	-F | -f:详细信息
	-l:长格式
字段C表示cpu占比
PRI表示优先级
NI表示nice值
PSR表示运行在哪个cpu上
ps -o pid,ni  #指定显示字段pid,ni

ps aux | grep "bash"

pgrep

pgrep bash仅显示pid

-U USERNAME

-u euid 表示有效用户,联系suid

pidof

pidof init显示1

top

全屏动态显示,可用于监控系统。

top -d 1  	# 一秒刷新一次
-b        	#  批处理,成批翻屏输出
-d 1 -b -n 3  # 显示3屏则退出

交互命令
M:根据RES排序
P:根据cpu排序
T:根据累计时间time+排序
l:是否显示平均负载和启动时间
t:是否显示进程和cpu状态
m:是否显示内存相关信息
c:是否完整的命令行CMD信息
q:退出
k:kill

字段
load average(平均负载):过去1min,5min,15min队列畅度
按1可以展开cpu,双核则显示cpu0,cpu1,默认显示平均状态。
us:用户空间
sy:内核空间 
id:idle
wa:wait for i/o
hi:硬件中断占据时间
si:软中断占据时间
st:stolen time,被偷走的时间
PR:RT表示实时优先级
VIRT:虚拟内存
RES:常驻内存
SHR:共享库
S:状态

kill

kill -1
kill -SIGKILL
# 可以简写名称,即去掉"SIG":kill -KILL

kill # PID默认为15号信号

killall CMD #杀死所有同名进程,如httpd

renice

#若是已经启动的进程:
renice NI PID  #(可以ps axo pid,ni,cmd查询)
#若启动时指定nice值:
nice -n NI CMD

vmstat

查看系统状态

vmstat 1 表示一秒刷新一次
vmstat 1 3表示一秒刷新一次,显示3次

procs字段
r:运行队列长度
b:阻塞队列长度
memory字段
swpd:交换队列长度
free:空闲内存
swap字段
si:物理->交换
so:交换->物理
单位是页面
io字段
bi:硬盘->内存
bo:内存->硬盘
单位当然是block
system字段
in:中断次数
cs:上下文切换次数
cpu字段
us/sy:用户/内核空间
id:空闲
wa:等待io
st:stolen time

uptime

Tell how long the system has been running.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值