1、进程的基本概念
(1)内核的功用:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能
(2)Process: 运行中的程序的一个副本; 存在生命周期
(3)task struct:Linux内核存储进程信息的固定格式,多个任务的task struct组成的链表为task list
(4)进程的创建:init由kernel创建,管理一切用户空间的进程,每个进程都由其父进程创建,任何进程需要创建子进程时,统一由init进程代理向内核发起请求
init程序在CentOS5,6,7中各不相同:
CentOS 5:SysV init 在系统启动和引导时,通过执行shell脚本创建各子进程,速度很慢
CentOS 6:upstart 各子进程的创建和运行优于init,能以并行方式多线创建子进程
CentOS 7:systemd 统一控制各进程和服务的运行,启动速度非常快
(5)进程的优先级:
0-139:
1-99:实时优先级;数字越大,优先级越高;
100-139:静态优先级;用户可调度管理的优先级,数字越小,优先级越高;
Nice值:-20,19 对应100-139 ;可以通过调整一个进程的nice值来改变进程的优先级
(6)进程内存:
每个进程占用的内存空间分为两种:线性地址空间和物理地址空间
内核是负责进行内存的资源分配给进程,虚拟内存中的线性地址空间中的数据与物理内存的物理地址空间数据的对应关系存放在task struct中,进程只能访问线性地址空间
Page Frame: 页框,作用是存储Page,页面数据 (能存放在内存页框空间中的数据)
MMU:Memory Management Unit 内存管理单元;负责转换进程运行需要访问的线性地址空间和物理地址空间的对应关系
(7)进程间的通信
IPC: Inter Process Communication 进程间通信 :
同一主机上:
signal 发信号
shm: shared memory 使用共享内存
semaphore 信号标
不同主机上:
rpc: remote procecure call 远程过程调用
socket: 基于套接字的通信,不同主机实现在套接字文件中进行数据交换
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2、进程的类型及状态
Linux内核:抢占式多任务
进程类型:
守护进程:daemon
在系统引导过程中启动的进程,跟终端无关的进程;
前台进程:跟终端相关,通过终端启动的进程
注意:也可把在前台启动的进程送往后台,以守护模式运行;
进程状态:
运行态:running
就绪态:ready 可以运行,但还没有被运行
睡眠态:
可中断:interruptable 可以随时被调动起来运行
不可中断:uninterruptable IO过程中进程需要加载的数据在内存中没有,于是请求内核将数据从磁盘加载到内存,以便让进程访问; 一次IO操作分两段步骤:数据从磁盘加载到内核内存中,接着从内核内存放置到内存空间中
停止态:stopped 进程暂停于内存中,但不会被调度,除非手动启动之
僵死态:zombie 子进程的任务完成处于僵死模式,直到父进程将其杀死
进程分类:
CPU-Bound:CPU密集型,通常非交互式的进程更加需要消耗CPU资源
IO-Bound:IO密集型,交互式的进程更需要消耗IO资源
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3、pstree命令
查看进程树
pstree - display a tree of processes
例如:
1、查看当前主机的进程树,可以看到所有进程都处于systemd进程下,CentOS6中是init
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4、ps命令
ps命令:
/proc/:内核中的状态信息,即内核参数;
内核参数: 两类
1、可设置其值从而调整内核运行特性的参数;/proc/sys/
2、状态变量:其用于输出内核中统计信息或状态信息,仅用于查看;
参数:模拟成文件系统类型;
进程:
/proc/#: /proc目录下以数字命名的目录,存放进程的相关信息
#:PID
1、查看/proc目录,1号目录即init进程,是所有进程的父进程
2、查看1目录,在其下存放了很多进程的相关信息
ps - report a snapshot of the current processes. 报告当前进程的快照
只显示当前命令执行这一刻的所有进程的状态
ps [options]:
选项有三种风格:
1 UNIX options, which may be grouped and must be preceded by a dash. 必须有-号
2 BSD options, which may be grouped and must not be used with a dash. 不能有-号
3 GNU long options, which are preceded by two dashes. 有--引导的长格式选项
启动进程的方式:
1、系统启动过程中自动启动:与终端无关的进程;
2、用户通过终端启动:与终端相关的进程;
选项:
a:所有与终端相关的进程;
x:所有与终端无关的进程;
u:以用户为中心组织进程状态信息显示;
常用组合之一:aux 表示以用户为中心显示进程,排序时是以PID升序方式排列
USER:启动进程的用户
PID:进程号
%CPU:CPU占用比率
%MEM:内存空间占用比率
VSZ:Virtual memory SiZe 虚拟内存集; 即占用的虚拟内存大小
RSS:ReSident Size,常驻内存集;
STAT: 进程的运行状态
R:running 运行状态
S:interruptable sleeping 可中断睡眠状态
D:uninterruptable sleeping 不可中断睡眠状态
T:Stopped 停止状态
Z:zombie 僵死状态
+:前台进程 (运行在终端之上,占据着命令提示符的进程)
l:多线程进程
N:低优先级进程
<:高优先级进程
s:session leader 会话主导者,例如bash
例如:
1、查看所有与终端相关的进程
PID:进程号 TTY:表示进程是通过哪个终端启动的 TIME:累计占用CPU的时间
COMMAND:由哪个命令启动的此进程,带中括号的表示是内核线程
2、查看所有与终端无关的进程,与终端无关的进程在TTY段会显示成问号
3、以用户归类显示所有进程
常用组合之二:-ef
-e:显示所有进程
-f:显示完整格式的进程信息
UID:启动进程的用户的UID号
PID:进程号
PPID:0号进程是init启动之前的过渡进程
C:CPU的占用百分比
STIME:进程的启动时间
TTY:与进程相关的终端
TIME:进程累计运行了的时间
CMD:启动此进程的命令
常用组合之三:-eFH
-F:显示完整格式的进程信息;与-f相同
C: cpu utilization CPU的占用百分比,0有可能表示占用比率非常小
PSR:运行于哪颗CPU之上
-H:以层级结构显示进程的相关信息;显示的是每个进程及其子进程,缩进级别相同表示是同级子进程
常用组合之四:-eo或axo,Unix和BSD风格,注意o一定要写在后面,因为o要带参数
o field1, field2,...:自定义要显示的字段列表,以逗号分隔;
常用的field: pid, ni(nice值), pri(优先级), psr(运行在哪颗CPU上), pcpu(CPU的利用率),
stat(状态),comm(由哪个程序启动), tty(相关的终端), ppid(父进程的进程号), rtprio(实时优先级)
ni:nice值;
priority:priority, 优先级;
rtprio:real time priority,实时优先级;
例如:
1、自定义只显示进程的pid和哪个程序启动的此进程
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5、pgrep及pkill命令
pgrep,pkill
- look up or signal processes based on name and other attributes
根据进程名或其他属性来查询进程或向进程发送信号,用于进程过滤
pgrep [options] pattern
-u uid:effective user 显示有效用户运行的进程
-U uid:read user 显示指定用户的进程
-t TERMINAL:查看与指定终端相关的进程;
-l:显示进程名;
-a:显示完整格式的进程名;
-P pid:显示此进程的子进程;
pgrep的所有选项同样适用于pkill命令
例如:
1、显示postfix系统用户运行的进程
2、显示postfix系统用户运行的进程,同时显示进程名
3、显示所有进程中包含ssh字符串的进程
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6、pidof命令
pidof命令:根据进程名,取其pid;
例如:
1、查看sshd进程的pid
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7、top命令
top命令: - display Linux processes
以动态方式显示所有进程的状态信息,根据占用资源倒序显示
top - 19:31:27 up 45 min, 2 users, load average: 0.01, 0.02, 0.05
19:29:24表示系统当前时间 43min表示系统运行时长,2 users表示当前登录到系统的用户数
load average:0.08,0.03,0.05表示过去1分钟、5分钟、15分钟的等待运行的进程的平均队列长度,队列云长表示CPU的负载越大,uptime命令也可以查看此行信息
Tasks: 359 total, 1 running, 358 sleeping, 0 stopped, 0 zombie
一共运行了359个进程,1个处在运行状态,358个处于睡眠状态,0个停止态,0个僵死态
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.5 id, 0.2 wa, 0.0 hi, 0.0 si, 0.0 st
CPU占用百分比:us(用户空间的进程所占用的CPU的百分比),sy(内核空间占用百分比)
ni(nice值调整所占用的CPU的百分比),id(CPU空闲时间所占用的百分比)
wa(等待IO完成所占用的百分比),hi(处理硬件中断所占用的百分比)
si(处理软件中断所占用的百分比),st(被偷走的百分比,例如被虚拟机占用)
KiB Mem : 1003184 total, 402772 free, 157448 used, 442964 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 611156 avail Mem
以Kb为单位显示物理内存和交换分区的空间使用信息,1003184 total(总空间为1G),free(空闲空间)
used(已用空间),buff/cache(用户缓冲和缓存所占用的内存空间,可以被回收后使用)
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
进程号 用户 优先级 nice值 虚拟内存集 常驻内存集 共享内存空间 当前状态 CPU占用百分比 内存占用百分比 运行时长 启动进程的命令
排序:(可以使用交互式命令,敲字母键)
P:以占据CPU百分比排序;
M:以占据内存百分比排序;
T:累积占用CPU时间排序;
1:数字键1可以分散显示每颗CPU占用的百分比
首部信息:
uptime信息:l命令 可将其显示/关闭
tasks及cpu信息:t命令 可将其显示/关闭
内存信息:m命令 可将其显示/关闭
退出命令:q
修改刷新时间间隔:s 例如Change delay from 3.0 to 1 改为每隔1秒钟就刷新一次
终止指定的进程:k 例如PID to signal/kill [default pid = 37553] 7 终止7号进程
选项:
-d #:指定刷新时间间隔,默认为3秒;
-b:以批次方式显示;top -b
-n #:显示多少批次;top -b -n 1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8、uptime命令
uptime命令:显示系统时间、运行时长及平均负载;
显示过去1分钟、5分钟和15分钟的平均负载(等待运行的进程队列的长度);
例如:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9、htop命令
htop相当于top的升级版,系统没有自带,需要额外安装,可以从epel源里安装htop程序
1,2表示第1,2颗CPU,Tasks进程总数(用户空间中),thr线程数量
按F1可查看使用帮助,可以指定各种方式显示各进程的相关信息
htop命令:
选项:
-d #:指定延迟时间间隔;
-u UserName:仅显示指定用户的进程;
-s COLUME:以指定字段进行排序;
子命令:
l:显示选定的进程打开的文件列表;
s:跟踪选定的进程的系统调用;
t:以层级关系显示各进程状态;
a:将选定的进程绑定至某指定的CPU核心;
例如:
1、查看postfix用户的进程信息,键入u选择postfix即可
2、选定37869号进程按l键可以显示进程打开的文件列表
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
10、vmstat命令
vmstat命令: - Report virtual memory statistics 报告虚拟内存统计数据
vmstat [options] [delay [count]]
procs:
r:等待运行的进程的个数;CPU上等待运行的任务的队列长度;
b:处于不可中断睡眠态的进程个数;被阻塞的任务队列的长度;
memory:
swpd:交换内存使用总量;0表示没有启用交换内存,如果swpd很大,通常表示物理内存不足了
free:空闲的物理内存总量;
buffer:用于buffer(缓冲)的内存总量;
cache:用于cache(缓存)的内存总量;
buffer和cache的作用是衔接两个系统之间速度不匹配而设定的
swap:
si:数据进入swap中的数据速率(kb/s)
so:数据离开swap的速率(kb/s)
si和so活动频繁时通常也表示物理内存不足了
io:
bi:从块设备(磁盘)读入数据到系统的速度(kb/s)
bo:保存数据至块设备的速率(kb/s)
system:
in:interrupts,中断速率;平均每秒钟的终端速度,中断CPU正在执行的任务
cs:context switch, 上下文切换的速率;即进程被内核调度的频率
cpu:
us: user space 用户空间的程序所占用的CPU的百分比
sy:system 内核空间
id:idle 空闲的
wa:wait 等待IO完成
st: stolen 被虚拟化技术所占用的百分比
选项:
-s:显示内存统计数据;
vmstat #:表示每隔多少秒刷新一次
例如:
1、默认以快照显示当前统计数据
2、vmstat #表示每隔多少秒刷新一次
3、每隔2秒刷新一次,显示3次后退出
4、显示内存统计数据
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
11、pmap命令
pmap命令: - report memory map of a process
pmap [options] pid [...]
-x:显示详细格式的信息;
另一种查看方式:cat /proc/PID/maps
例如:
1、显示1号进程的详细信息
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
12、glances命令
glances命令:- A cross-platform curses-based monitoring tool 可以远程监控查看
内建命令:
常用选项:
-b:以Byte为单位显示网卡数据速率;
-d:关闭磁盘I/O模块;
-m:关闭mount模块;
-n:关闭network模块;
-t #:刷新时间间隔;
-1:每个cpu的相关数据单独显示;
-o {HTML|CSV}:输出格式;
-f /PATH/TO/SOMEDIR:设定输出文件的位置;
C/S模式下运行glances命令:
服务模式:
glances -s -B IPADDR
IPADDR:本机的某地址,用于监听;
客户端模式:
glances -c IPADDR
IPADDR:是远程服务器的地址;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
13、dstat命令
dstat命令: - versatile tool for generating system resource statistics
dstat [-afv] [options..] [delay [count]]
常用选项:
-c, --cpu:显示cpu相关信息;
-C #,#,...,total 指定看哪颗CPU
-d, --disk:显示磁盘的相关信息
-D sda,sdb,...,total 查看指定磁盘
-g:显示page相关的速率数据;
-m:Memory的相关统计数据
-n:Interface的相关统计数据;
-p:显示process的相关统计数据;
-r:显示io请求的相关的统计数据;
-s:显示swapped的相关统计数据;
--tcp:显示tcp相关的统计数据;
--udp:显示udp相关的统计数据;
--raw:显示raw sockets相关的统计数据;
--socket:显示socket相关的统计数据;
--ipc:进程间通信,显示多个进程间通信时的统计数据
--top-cpu:显示最占用CPU的进程;
--top-io:最占用io的进程;
--top-mem:最占用内存的进程;
--top-lantency:延迟最大的进程;
例如:
1、指定2秒钟刷新一次,一共显示5次
3、指定查看最占用CPU和最占用内存的进程
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
14、kill命令
kill命令: - terminate a process
用于向进程发送信号,以实现对进程的管理;
显示当前系统可用信号:
kill -l [signal]
每个信号的标识方法有三种:
1) 信号的数字标识;
2) 信号的完整名称;
3) 信号的简写名称;
向进程发信号:
kill [-s signal|-SIGNAL] pid...
常用信号:
1) SIGHUP:无须关闭进程而让其重读配置文件;
2)SIGINT:终止正在运行的进程,相当于Ctrl+c
9)SIGKILL:杀死运行中的进程;
15)SIGTERM:终止运行中的进程;
18)SIGCONT:继续运行进程
19)SIGSTOP:停止,将进程送往后台
例如:
1、向37805号进程发送15号信号终止其进程,15号信号是默认的发送信号,可以不加
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
15、killall命令
killall命令: - kill processes by name 根据进程名杀死进程,
killall [-SIGNAL] program
SIGNAL信号和kill的信号相同
例如killall httpd 杀死httpd相关的进程