<p
在linux系统中,内核的功用有:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等,在这众多的模块中,进程管理是相对重要的一环,即使不像文件系统和网络功能那么复杂。在进程管理中,内核对进程的创建、切换、撤销和调度都有很详细的定义。1、进程类型
守护进程:在系统引导过程中启动的进程,跟终端无关的进程
前台进程:跟终端相关,通过终端启动的进程
注意:也可把在前台启动的进程送往后台,以守护模式运行
2、进程状态
在内存中运行的进程也有着各种各样的状态
运行态R:running
就绪态:ready
睡眠态
可中断S:interruptable
不可中断D:uninterruptable
停止态T:stopped,暂停于内存中,但不会被调度,除非手动启动
僵死态Z:zombie,结束进程,父进程结束前,子进程不关闭
3、进程调度
调度策略:调度策略就是这样一组规则:决定什么时候以怎样的方式选择一个新进程运行。所以定义一个进程的优先级来满足这样一种策略。这个策略以0-139的优先级来表示。
实时优先级:1-99
无需调整,数字越大,优先级越高
静态优先级:100-139
可调整,数字越小,优先级越高
优先级以Nice值调整
Nice:-20—-19,存在于task_struct结构体中
公式如下:
pri(new)=nice+pri(old)
调度算法:早起的Linux中,调度算法是根据进程的优先级选择“最佳”进程来执行,它的缺点是时间开销与“可运行进程数量”有关。某种调度算法一定满足一种函数关系,业界称为BigO
BigO:时间复杂度,用时和规模的关系。有:
O(1),O(logn),O(n)线性,O(n^2)抛物线,O(2^n)
4、进程管理命令之pstree
pstree–displayatreeofprocesses
显示进程数
5、进程管理命令之ps
Linux系统各进程的相关信息均保存在/proc/PID目录下的各文件中;
ps[OPTION]…
选项:支持两种风格
常用组合:aux
u:以用户为中心组织进程状态信息显示
a:与终端相关的进程;
x:与终端无关的进程;
~]#psaux
USER PID%CPU%MEM VSZ RSSTTY STATTART TIMECOMMAND
USER 运行进程的用户 PID 进程ID %CPU 占用CPU %MEM 占用内存 VSZ 虚拟内存集 RSS 实际内存集 TTY 终端信息 STAT 进程状态 START 进程状态 TIME 运行时间COMMAND 进程名称 常用组合:-ef
–e:显示所有进程
-f:显示完整格式程序信息
常用组合:-eFH
-F:显示完整格式的进程信息
-H:以进程层级格式显示进程相关信息
6、进程管理命令之pkill
pkill[options]pattern
-uuid:effectiveuser
-Uuid:realuser
-tterminal:与指定终端相关的进程
-l:显示进程名
-a:显示完整格式的进程名
-Ppid:显示其父进程为此处指定的进程的进程列表
7、进程管理命令之pidof
根据进程名获取其PID
8、进程管理命令之top

Tasks
total 进程总数 running 运行进程数 sleeping 休眠态进程数 stopped 停止态进程数 zobie 僵死态进程数%Cpu(s)
us(userspace) 用户空间占用CPU百分比 sy(system) 内核空间占用CPU百分比 注:高负载时:us:sy=7:3 ni(nice) 修改nice值占用的CPU百分比 id(idle) 空闲的CPU百分比 wa(wait) 等待IO完成占用的CPU百分比 hi(hardwareinterrupt) 硬中断占用CPU百分比 si(softwareinterrupt) 软中断占用CPU百分比 st(stole) 被偷走的CPU,比如VMwarebuffer(缓冲) 元数据 cache(缓存) 数据PID 进程号 USER 进程发起者 PR(priority) 优先级 NI(Nice) nice值 VIRT 虚拟内存集 RES 常驻内存集 SHR 共享内存集 S(status) 状态 %CPU CPU占用比 %MEM 内存占用比 TIME+ 运行时长 COMMAND 启动进程对显示排序的方法:
P 占据的CPU百分比 M 占据内存百分比 T 累积占据CPU时长首部信息显示:
l uptime信息 t tasks及cpu信息 #数字 cpu分别显示 m memory信息 s 修改刷新时间间隔 Esc 退出 k 终止指定进程 W 保存文件 q 退出命令9、进程管理命令之htop
=
比top更加高级的进程管理软件
f1帮助
f2切换CPU、mem、swap显示方式
f10退出
常用选项:
-d#:指定延迟时间;
-uUserName:仅显示指定用户的进程;
-sCOLOMN:以指定字段进行排序;
命令:
s:跟踪选定进程的系统调用;
l:显示选定进程打开的文件列表;
a:将选定的进程绑定至某指定CPU核心;
t:显示进程树
注意:Fedora-EPEL源
10、进程管理命令之vmstat
vmstat-s:内存的汇总信息
procs 项目 r 等待运行的进程的个数,和核心数有关 b 处于不可中断睡眠态的进程个数(被阻塞的队列的长度)swap 项目 si 从磁盘交换进内存的数据速率(kb/s) so 从内存交换至磁盘的数据速率(kb/s)io 项目 bi 从块设备读入数据到内存的速率(kb/s) 读 bo 从内存写入磁盘的速率(kb/s) 写memory 项目 swad 交换内存的使用总量 free 空闲物理内存总量 buffer 用于buffer的内存总量 cache 用于cache的内存总量 system 项目 in:interrupts 中断速率cs:contextswitch 进程切换速率 cpu 项目 us 用户空间占用的比例 sy 内核空间占用的比例 id 空闲空间占用的比例 wa 等待IO完成所消耗的时间比例 st 被虚拟化技术偷走的时间比例 11、进程管理命令之glances
glances[-bdehmnrsvyz1][-Bbind][-cserver][-Cconffile][-pport][-Ppassword][–password][-trefresh][-ffile][-ooutput]
内建命令:
a Sortprocessesautomatically l Show/hidelogs
c SortprocessesbyCPU% b BytesorbitsfornetworkI/O
m SortprocessesbyMEM% w Deletewarninglogs
p Sortprocessesbyname x Deletewarningandcriticallogs
i SortprocessesbyI/Orate 1 GlobalCPUorper-CPUstats
d Show/hidediskI/Ostats h Show/hidethishelpscreen
f Show/hidefilesystemstats t ViewnetworkI/Oascombination
n Show/hidenetworkstats u ViewcumulativenetworkI/O
s Show/hidesensorsstats q Quit(EscandCtrl-Calsowork)
y Show/hidehddtempstats
常用选项:
-b:以Byte为单位显示网卡数据速率;
-d:关闭磁盘I/O模块;
-f/path/to/somefile:设定输入文件位置;
-o{HTML|CSV}:输出格式;
-m:禁用mount模块
-n:禁用网络模块
-t#:延迟时间间隔
-1:每个CPU的相关数据单独显示;
C/S模式下运行glances命令:
服务模式:
glances-s-BIPADDR
IPADDR:指明监听于本机哪个地址
客户端模式:
glances-cIPADDR
IPADDR:要连入的服务器端地址
12、进程管理命令之dstat
dstat[-afv][options..][delay[count]]
-c:显示cpu相关信息;
-C#,#,…,total
-d:显示disk相关信息;
-Dtotal,sda,sdb,…
-g:显示page相关统计数据;
-m:显示memory相关统计数据;
-n:显示network相关统计数据;
-p:显示process相关统计数据;
-r:显示io请求相关的统计数据;
-s:显示swapped相关的统计数据;
–top-cpu:显示最占用CPU的进程;
–top-io:显示最占用io的进程;
–top-mem:显示最占用内存的进程;
–top-lantency:显示延迟最大的进程;
13、进程管理命令之kill
kill命令:
向进程发送控制信号,以实现对进程管理
显示当前系统可用信号:
#kill-l
#man7signal
常用信号:
1)SIGHUP:无须关闭进程而让其重读配置文件;
2)SIGINT:中止正在运行的进程;相当于Ctrl+c;
9)SIGKILL:杀死正在运行的进程;
15)SIGTERM:终止正在运行的进程;
18)SIGCONT:
19)SIGSTOP:
指定信号的方法:
(1)信号的数字标识;1,2,9
(2)信号完整名称;SIGHUP
(3)信号的简写名称;HUP
向进程发信号:
kill[-SIGNAL]PID…
终止“名称”之下的所有进程:
killall[-SIGNAL]Program
14、Linux的作业控制
前台作业:通过终端启动,且启动后一直占据终端;
后台作业:可以通过终端启动,但启动后即转入后台运行(释放终端);
如何让作业运行于后台?
(1)运行中的作业
Ctrl+z
(2)尚未启动的作业
#COMMAND&
此类作业虽然被送往后台运行,但其依然与终端相关;如果希望送往后台后,剥离与终端的关系:
#nohupCOMMAND&
查看所有作业:
#jobs
作业控制:
#fg[[%]JOB_NUM]:把指定的后台作业调回前台;
#bg[[%]JOB_NUM]:让送往后台的作业在后台继续运行;
#kill[%JOB_NUM]:终止指定的作业;