内核的功用
进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等
Process: 运行中的程序的一个副本,是被载入内存的一个指令集合
进程ID(Process ID,PID)号码被用来标记各个进程
UID、GID、和SELinux语境决定对文件系统的存取和访问权限,
通常从执行进程的用户来继承
存在生命周期
task struct:
Linux内核存储进程信息的数据结构格式
task list:
多个任务的的task struct组成的链表
进程创建:
init:第一个进程 centos6 centos7上使用的是 systemd
父子关系
进程:都由其父进程创建
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负责转换线性和物理地址
TLB:Translation Lookaside Buffer 翻译后备缓冲器,用于保存虚拟地址和物理地址映射关系的缓存
IPC: Inter Process Communication
同一主机:
signal:信号
shm: shared memory
semaphore:信号量,一种计数器
不同主机:
rpc: remote procedure call
socket: IP和端口号
进程状态
Linux内核:抢占式多任务
进程类型:
守护进程: daemon,在系统引导过程中启动的进程,和终端无关进程 (在终端执行程序不影响,开机自动启动的叫守护进程)
前台进程:跟终端相关,通过终端启动的进程 (终端被占用,无法进行其它操作)
注意:两者可相互转化
进程状态:
运行态:running
就绪态:ready
睡眠态:
可中断:interruptable
不可中断:uninterruptable
停止态:stopped,暂停于内存,但不会被调度,除非手动启动
僵死态:zombie,结束进程,父进程结束前,子进程不关闭
进程的分类
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目录下的各文件中(每PID代表每一个进程)
top
排序:(进入命令后)
P:以占据的CPU百分比,%CPU
M:占据内存百分比,%MEM
T:累积占据CPU时长,TIME+
首部信息显示: (进入命令后) 显示或隐藏
uptime信息:l命令
tasks及cpu信息:t命令
cpu分别显示:1 (数字) 显示总的,还是单个显示(多核)
memory信息:m命令
退出命令:q (下面都在命令当中修改刷新间隔)
修改刷新时间间隔:s 输入s 再指定PID
终止指定进程:k
保存文件:W
栏位信息简介 CPU
us:用户空间
sy:内核空间
ni:调整nice时间
id:空闲
wa:等待IO时间
hi:硬中断
si:软中断(模式切换)
st:虚拟机偷走的时间
在命令输入之前就指定相关参数
选项:
-d #: 指定刷新时间间隔,默认为3秒
-b: 全部显示所有进程
-n #: 刷新多少次后退出
PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)
htop
top的增强版(要安装)
htop命令:需从Fedora-EPEL源安装 http://172.16.0.1/fedora-epel/7/x86_64
选项:
-d #: 指定延迟时间;
-u UserName: 仅显示指定用户的进程
-s COLUME: 以指定字段进行排序
子命令:
s: 跟踪选定进程的系统调用
l: 显示选定进程打开的文件列表
a:将选定的进程绑定至某指定CPU核心
t: 显示进程树
ps
ps [OPTION]…
支持三种选项:
UNIX选项 如-A -e
BSD选项 如a
GNU选项 如–help
选项:默认显示当前终端中的进程
a 选项包括所有终端中的进程
x 选项包括不链接终端的进程
u 选项显示进程所有者的信息
f 选项显示进程的父进程
k|–sort 属性 对属性排序
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
+: 前台进程
l: 多线程进程
L:内存分页并带锁
N:低优先级进程
<: 高优先级进程
s: session leader,会话(子进程)发起者
常用组合:-ef
-e: 显示所有进程
-f: 显示完整格式程序信息
常用组合:-eFH
-F: 显示更完整格式的进程信息
-H: 以进程层级格式显示进程相关信息
常用组合:自定义
-eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm
axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
euid 正在执行的用户(SUID实别不出来)
ruid 真正执行的用户(SUID实别出来)
进程优先级
ni: nice值
pri: priority 优先级
psr: processor CPU编号
rtprio: 实时优先级
示例:ps axo pid,cmd,psr,ni,pri,rtprio
pri nice优先级 默认19
psi 系统优先级 默认0
进程优先级调整:
静态优先级:100-139
进程默认启动时的nice值为0,优先级为120
只有根用户才能降低nice值(提高优先性)
nice命令: nice [OPTION] [COMMAND [ARG]…]
renice命令: renice [-n] priority pid…
例:renice -n 10 pid
注:root用户可以随意调整大小
基本用户调整,只能调大
查看: ps axo pid,comm,ni
可能在创建文件时,直接给定优先级
例: nice -n 5 vim xdg
搜索进程
最灵活:ps 选项 | 其它命令
按预定义的模式:pgrep
pgrep [options] pattern
-u uid: effective user 生效者
-U uid: real user 真正发起运行命令者
-t terminal: 与指定终端相关的进程
-l: 显示进程名
-a: 显示完整格式的进程名
-P pid: 显示指定进程的子进程
注:pgrep -lu wang
u 后面要直接跟用户 (顺序不能的换)
按确切的程序名称:/sbin/pidof
pidof bash
查看PID
例:ps -C f1.sh -C f2.sh o pid,cmd,%cpu,%mem
-C 指定文件名
查看多个进程
注:在脚本当中,shebang机制 –> #!/bin/bash
要加入,不加的话,在ps查看进程的时候,查看不到f1.sh这个名字,只能看到bash
注:跟pgrep不同
kill命令
向进程发送控制信号,以实现对进程管理,每个信号对应一个数字,
信号名称以SIG开头(可省略),不区分大小写
显示当前系统可用信号: kill –l,trap -l
常用信号:man 7 signal
1) SIGHUP: 无须关闭进程而让其重读配置文件
2) SIGINT: 中止正在运行的进程;相当于Ctrl+c
3) SIGQUIT:相当于ctrl+\ 相当于quit
9) SIGKILL: 强制杀死正在运行的进程
15) SIGTERM:终止正在运行的进程 默认的信号(有些进程终止不了)
18) SIGCONT:继续运行
19) SIGSTOP:后台休眠
注: kill -0 PID 不发任何信号,判断当前进程是否正常运行
正常运行 echo $? –> 0
指定信号的方法:
(1) 信号的数字标识:1, 2, 9
(2) 信号完整名称:SIGHUP
(3) 信号的简写名称:HUP
注:在传输信息的时候,上面的三种方式都可以表示出来
按PID:
kill [-SIGNAL] pid …
kill –n SIGNAL pid
kill –s SIGNAL pid
其中-s 9 制定了传递给进程的信号是9,即强制、尽快终止进程。
按名称:
killall [-SIGNAL] comm…
例: killall -0 httpd &> /dev/nul || service httpd restart
-0信号检查该进程是否启动
killall命令用于杀死指定名字的进程(kill processes by name)。
我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的进程,
我们还需要在之前使用ps等命令再配合grep来查找进程,而killall把这两个过程合二为一。
killall 信号 commond
按模式:
pkill [options] pattern
-SIGNAL -u uid: effective user,生效者
-U uid: real user,真正发起运行命令者
-t terminal: 与指定终端相关的进程
-l: 显示进程名(pgrep可用)
-a: 显示完整格式的进程名(pgrep可用)
-P pid: 显示指定进程的子进程
vmstat
命令:虚拟内存信息
vmstat [options] [delay [count]]
例:vmstat 2 5 显示内存信息 刷新间隔2s 刷新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: inter rupts 中断速率,包括时钟
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.
iostat
统计CPU和设备IO信息
示例:iostat 1 10 刷新间隔1s 刷新10次结束
例:
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
每秒钟的事务 读速度 写速度 总量读 总量写
pmap命令:进程对应的内存映射(显示进程使用哪块内存空间)
pmap [options] pid […]
-x: 显示详细格式的信息
例:pmap -x 1 1:PID
或pmap 1
另外一种实现:
cat /proc/PID/maps
原创文章,作者:_xddggg,如若转载,请注明出处:http://www.178linux.com/85536