内核的功用主要有进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能这几个方面,本文主要讨论linux进程及作业管理。 进程管理:
进程,process,运行中程序的一个副本,且存在生命周期;
进程分为CPU bound和I/Obound。
CPU bound:CPU密集型(类似于高清视频)
I/O bound:IO密集型(编辑器等频繁IO操作)
Linux内核存储进程信息的固定格式为:task struct(结构体)
多个任务的task struct组件的链表:task list
进程创建:
在centos6上,init为初始化进程,父进程。
请求发出者(进程)都由父进程创建,然后为系统调用;
进程:fork() clone()
IPC: Inter Process Communication
同一主机上:
signal
shm: shared memory
semerphor
不同主机上:
rpc: remote procecure call
socket:
进程调度:保存现场,恢复现场
进程运行程序,是程序的一部分
多任务:多进程同时运行
抢占式多任务
进程优先级:
0-139:
1-99:实时优先级,数字越大,优先级越高;
100-139:静态优先级,数字越小,优先级越高;
Nice值:-20,19 -20相当于100,19相当于139;
每个进程运行时间不同,linux支持抢占式多任务,当一个低优先级的程序在运行,这时有一个高优先级的运行,过段时间后这个高优先级的提前运行。
算法复杂度:Big 0 (衡量标准算法)
o(1):恒定的,无论优先级,消耗时间相同(最佳的)
o(logn):每次调度,调度程序需要从树中找出优先级最高的进程
o(n):线性的
o(n^2):抛物线机制
o(2^n):随队列深度增长
进程状态:
运行态:running
就绪态:ready
睡眠态:
可中断:interruptable
不可中断:uninterruptable
停止态:暂停于内存中,但不会被调度,除非手动启动之:stopped
僵死态:zombie Linux系统上的进程查看及管理工具: 在linux系统中主要的进程管理工具有:pstree,ps,pidof,pgrep,top,htop,glances,pmap,vmstat,dstat,kill,job,bg,fg,nohup,nice,renice,killall,…
1. pstree命令:
pstree - display a tree of processes
在centos6中父进程为init,而在centos7中,父进程为systemd
pstree –p:显示各进程的PID
其它用法选项可参照man手册。
2. ps命令:process state
ps命令显示的是ps命令执行时系统上进程信息的快照,是静态的结果。
Linux运行中的内核的相关信息是通过/proc伪文件系统输出的;各进程都有一个其PID命名的子目录,每个子目录中许多文件存储了进程的相关信息。
进程文件:/proc/#
#:PID
ps - report a snapshot of the current processes.
ps [options]
选项有三种风格:
1 UNIX options, which maybe grouped and must be preceded by a dash.
2 BSD options, which maybe grouped and must not be used with a dash.
3 GNU long options, which arepreceded by two dashes.
启动进程的方式:
系统启动过程中自动启动:与终端无关的进程;
通过用户终端启动:与终端相关的进程;
常用组合之一:aux
a:所有与终端相关的进程;
x:所有与终端无关的进程;
u:以用户为中心组织进程状态信息显示;
VSZ:虚拟内存集;
RSS:Resident Size,常驻内存集;
STAT:
R:running;
S:interruptable sleeping
D:uninterruptable sleeping
T:stopped
Z:zombie
+:前台进程;
1:多线程进程;
N:低优先级进程;
<:高优先级进程;
s:session leader;
常用组合之二:-ef
-e:显示所有进程;
-f:显示完整格式的进程信息;
常用组合之三:-eFH
-F:显示额外信息
C:cpu utilization cpu利用率
PSR:运行在哪一颗cpu之上
-H:以层级结构显示进程的相关信息;
常用组合之四:-eo,axo
o field2,field2,…:自定义要显示的字段列表,以逗号分隔;
常用的field:pid,ni,pri,psr,pcpu,stat,comm,tty,ppid,rtprio
ni:nice值;
priority:优先级;
rtprio:realtime priority,实时优先级;
3. pgrep,pkill命令:
pgrep, pkill - look up or signalprocesses based on name and other attributes
pgrep [options] pattern
-uuid:effectiveuser;
-Uuid:readuser;
-tTERMINAL:与指定的终端相关的进程;
-l:显示进程名;
-Ppid:显示此进程的子进程;
pkill的用法与pgrep完全一样。
4. pidof命令:根据进程名,取其id
pidof -- find the process ID of a running program.
pidof [ program ]
5. top命令:
top - display Linux tasks
排序:
P:以占据cpu百分比排序;
M:已占据内存百分比排序;
T:累计占用CPU时间排序;
首部信息:按以下命令可以显示或隐藏指定的信息;
uptime信息:l命令
tasks及cpu信息:t命令
内存信息:m命令
退出命令:q
修改刷新时间间隔:s
终止指定的进程:k
选项:
-d #:指定刷新时间间隔,默认为3秒;
#top –d 1:指定刷新时间为1秒刷新一次;
-b:以批次方式显示;
-n #:显示多少批次;
#top –b –n 2:以批次显示显示两批,自动退出;
6. uptime命令:显示系统时间、运行时长及平均负载;
过去一分钟、五分钟和十五分钟的平均负载;
等待运行的进程队列的长度;
uptime - Tell how long the system has been running.
#uptime
7. htop命令:
centos6上没有htop的安装包,我们需要手动配置epel的yum源安装htop;
htop - interactive process viewer:交互式进程查看器
选项:
-d #:指定延迟时间间隔;
-u USERNAME:仅显示指定用户的进程;
#htop –u rpc
-s COLUME:以指定字段进行排序;