内核的功能:
进程管理 文件系统 网络功能 内存管理 驱动程序 安全功能等
rocess:运行中的程序的一个副本,是被载入内存的一个指令集合
进程ID(Process ID,PID)号码被用来标记各个进程 UID,GID,和SElinux语境决定对文件系统的存取和访问权限,通常从执行进程的用户来继承,存在生命周期。
task struct:Linux内核存储进程信息的数据结构格式
task list:多个任务的task Struct组成的链表
进程创建:
init:第一个进程
父子进程
进程:
都由其父进程创建,COW
fork(),clone()
进程优先级:
系统优先级:数字越小,优先级越高
0-139(centos4,5)
各有140个运行队列和过期队列
0-98,99(centos6)
实时优先级:99-0:值最大优先级最高
Nice值:-20,19对应系统优先级100-139或99
big O:时间复杂度,有时和规模的关系
O(1),O(logn),O(n)线性,O(n^2)抛物线,O(2^n)
进程内存:
Page Frame:页框,用存储页面数据,存储Page 4K
LRU:Least Recently Used 近期最少使用算法,释放内存物理地址空间和线性地址空间
MMU:Memory Management unit 负责转换线性和物理地址
IPC:Inter Process Communication
同一主机上:
signal
shm:shared memory
semophore:信号量,一种计数器
不同主机上:
rpc:remote procedure call
socket:IP号和端口号
Linux内核:抢占式多任务
进程类型:
守护进程:daemon,在系统引导过程中启动的进程,和终端无关进程
前台进程:跟终端相关,通过终端启动的进程
注意:两者可相互转化
进程状态:
运行态:running
就绪态:ready
停止态:stopped 暂停于内存中,但不会被调度,除非手动启动
将死态:zombie 结束进程,父进程结束前,子进程不关闭
睡眠态:
可中断:interruptable
不可中断:uninterruptable
进程的分类:
CPU-Bound:CPU密集型,非交互式
IO-Bound: IO密集型,交互
Linux系统状态的查看及管理工具:
pstree,ps,pidof,pgrep,top,htop,glance,pmap,vmstat,dstat,kill,pkill,job,bg,fg,nohup
pstree命令:
pstree – display a tree of processes
ps命令:process state
ps -report a snapshot of the current processes
Linux系统各进程的相关信息均保存在/proc/PID目录下的各文件中
支持三种选项:
unix选项 如-A -e
BSD选项 如a
GUN选项 如–help
默认显示当前终端中的进程:
a 选项包括所有终端中的进程
x选项包括不链接终端的进程
u选项显示进程所有者的信息
f选项显示进程的父进程
o属性….选项显示定制的信息pid comm %cpu %mem state tty euser ruser
VSZ:virtual Memory size 虚拟内存集 线性内存
RSS:ReSident Size 常驻内存集
STAT: 进程状态
R:running
S:interruptable sleeping
D:uninterruptable sleeping
T:stopped
Z:zombie
+:前台进程
I:多线程进程
N:低优先级进程
<:高优先级进程
s:session leader 会话(子进程)发起者
常用组和:-ef
-e:显示所有进程
-f:显示完整格式程序信息
常用组和:-eFH
-F:显示更完整格式的进程信息
-H:以进程层级格式显示进程相关信息
常用组和:自定义
-eo:显示所有进程, 定制属性 例如:[root@nzg7 ~]# ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm
-axo: 所有终端所有进程,定制属性 例如:[root@nzg7 ~]# ps -axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
ni:nice值
pri:priority,优先级
psr:processor,cpu编号
rtprio:实时优先级
最灵活:ps 选项 | 其他命令
按预定义的模式:pgrep
pgrep [options] pattern
-u uid:effective user,生效者
-U uid:real user 真正的发起运行命令者
-t terminal:与指定终端相关的进程
-l 显示进程名
-a 显示完整格式的进程名
-P pid:显示指定进程的子进程
按确切的程序名称:/sbin/pidof
$pidof bash
uptime
显示当前时间,系统已启动的时间,当前上线人数,系统平均负载(1、5、10分钟的平均负载,一般不会超过1)
系统平均负载:
指在特定时间间隔内运行队列中的平均进程数
如果每个CPU内核的当前活动进程数不大于3的话,那么系统的性能良好,如果每个CPU内核的任务大于5,那么这台机器的性能有严重问题
如果linux主机是1个双核cpu的话,当load Average 为6的时候说明机器已经充分使用了
top:内置命令
排序:
p:已占据的cpu百分比,%cpu
M:占据内存百分比,%MEM
T:累积占据CPU时长,TIME+
首部信息显示:
uptime信息: |命令
tasks及cpu信息:+命令
cpu分别显示: 1(数字)
Memory信息: m命令
退出命令: q
修改刷新时间间隔:s
终止指定进程:k
保存文件:W
栏位信息简介
us:用户空间
sy:内核空间
ni:调整nice时间
id:空闲
wa:等待IO时间
hi:硬中断
si:软中断(模式切换)
s+:虚拟机偷走的时间
PID (Process Id):任务的进程ID
PPID (Parent Process Pid):父任务的进程ID
RUSER (Real User Name):任务的所有者真实名称
UID (User Id):任务所有者ID
USER (User Name):任务所有者名称
GROUP (Group Name):任务所有者群组名
TTY (Controlling Tty):终端
PR (Priority):优先级
%CPU (CPU usage):CPU使用率
%MEM (Memory usage (RES)):内存使用率
S (Process Status):进程状态
TIME+ (CPU Time, hundredths):CPU时间,精确到秒
选项:
-d #:指定刷新时间间隔,默认3秒
-n #:以批次方式
-b:以批次方式
-u User:仅显示指定用户的进程
-sCOLUME:以指定字段进行排序
#htop需要自己下载
子命令:
s:跟踪选定进程的系统调用
l: 显示选定进程打开的文件列表;
a:将选定的进程绑定至某指定CPU核心;
t: 显示进程树
vmstat命令:虚拟内存信息
vmstat [options] [delay [count]]
vmstat 2 5
procs:
r:等待运行的进程的个数,和核心数有关
b:处于不可中断睡眠态的进程个数(被阻塞的队列的长度)
memory:
swpd: 交换内存的使用总量
free: 空闲物理内存总量
buffer:用于buffer的内存总量
cache: 用于cache的内存总量
swap:
si:从磁盘交换进内存的数据速率(kb/s)
so:从内存交换至磁盘的数据速率(kb/s)
io:
bi:从块设备读入数据到系统的速率(kb/s)
bo: 保存数据至块设备的速率
system:
in: interrupts, 中断速率,包括时钟
cs: context switch, 进程切换速率
cpu:
us: Time spent running non-kernel code
sy: Time spent running kernel code
id: Time spent idle. Linux 2.5.41前,包括IO-wait time.
wa: Time spent waiting for IO. 2.5.41前,包括in idle.
st: Time stolen from a virtual machine. 2.6.11前, unknown.
选项:
-s: 显示内存的统计数据
dstat命令:
dstat [-afv] [options..] [delay[count]]
-c:显示cpu相关信息
-d:显示disk的相关信息
-g;显示page相关统计数据
-m:显示Memory相关统计数据
-n:显示network相关统计数据
-p:显示process相关统计数据
-r:显示io请求相关的统计数据
-s:显示swapped相关的统计数据
–tcp tcp链接数
–udpudp链接数
–socket 查看详细监控信息
–top-cpu:显示最占用cpu的进程
–top-io:显示最占用io的进程
–top-mem:显示最占用内存的进程
–top-latency:显示延迟最大的进程
进程管理工具
kill:
向进程发送控制信号 ,以实现对进程管理
显示当前系统可用信号:kill -1
常用信号:man 7 signal
1)SIGHUP:无须关闭进程而让其重读配置文件
2)SIGINT:中止正在运行的进程;相当于ctrl+c
9)SIGKILL:杀死正在运行的进程
15)SIGTERM:终止正在运行的进程
18)SIGCONT:继续运行
19)SIGSTOP:后台休眠
指定信号的方法:
(1)信号的数字标识:1,2,9
(2)信号的完整名称:SIGHUP
(3)信号的简写名称:HUP
按PID: kill [-SIGNAL] pid …
按名称:killall [-SIGNAL] comm …
按模式:pkill [options] pattern
-SIGNAL
-u uid:effective user,生效者
-Uuid:real user,真正发起运行命令着
-t terminal:与指定终端相关的进程
-l:显示进程名
-a:显示完整格式的进程名
-p pid:显示父进程为此处指定的进程的进程列表
linux作业控制:
前台作业:通过终端启动,且启动后一直占据终端
后台作业:可通过终端启动,但启动后即转入后台运行(释放终端)
如何让作业运行在后台?
运行中的作业:ctrl+z
尚未启动的作业:COMMand &
后台作业虽然被送往后台运行,但其依然与终端相关,退出终端,将关闭后台作业,如果希望送往后台后,剥离与终端的关系
#nohup COMMAND& #screen:COMMAND
查看所有作业;
jobs
作业控制:
#fg [[%]JOB_NUM]:把指定的后台作业调回前台
#bg [[%]JOB_NUM]: 让送往后台的作业在后台继续运行
#kill [%JOB_NUM]: 终止指定的作业
进程优先级:
默认优先级:100-139
进程默认启动时的nice值为0,优先级为120
只有根用户才能降低nice值(提高优先级)
nice命令:
nice [OPTION] [COMMAND [ARG]…]
renice命令:
renice [-n] priority pid…
查看:
ps axo pid,comm,ni
原创文章,作者:闹钟哥,如若转载,请注明出处:http://www.178linux.com/45692