一、进程
linux进程概念:
进程是一个执行中的程序的实例(副本),所有系统上运行的数据都会以进程的类型存在。进程是计算机科学中最深刻最成功的概念之一。进程提供给应用程序的关键抽象是:
1.一个独立的逻辑控制流,它提供一个假象,好像我们的应用程序独占地使用处理器。
2.一个私有的地址空间,它提供一个假象,好像我们的程序独占地使用存储器系统。
每个进程都有一个唯一的数字标识符,称为进程 ID ,它总是一个非负整数。使用 top, htop 等工具就可以看到操作系统当前的进程列表,并且会按照一定的指标进行排序。
一个老进程会成为新进程的父进程,那么新进程就是老的进程的子进程。一个进程除了有一个PID之外,还会有一个PPID来存储的父进程 PID。所有进程的源头是 init 进程,即所有的进程会构成一个以 init (CentOS7下是systemd)为根的树状结构。
进程状态:
运行状态:进程正在运行或在运行队列中等待运行 。
可中断等待状态:进程正在等待某个事件完成(如等待数据到达),等待过程中可以被信号或定时器唤醒。
不可中断等待状态:进程正在等待某个事件完成并且等待中不可以被信号或定时器唤醒,必须一直等待到事件发生。
僵死状态:进程已终止,但进程描述符依然存在,直到父进程调用wait()函数后释放。
停止状态:进程因为收到SINSTOP,SIGSTP,SIGTIN,SGIOU信号后停止运行或者该进程正在被跟踪。
二、常用命令
2)ps命令:
/proc/:内核中的状态信息;
内核参数:模拟成文件系统类型;
可设置其值从而调整内核运行特性的参数;/proc/sys/
状态变量:其用于输出内核中统计信息或状态信息,仅用于查看;
每个进程都在/proc/目录下有个以PID号命名的子目录,目录中存放了当前进程的各种状态参数。
启动进程的方式:
系统启动过程中自动启动:与终端无关的进程;
用户通过终端启动:与终端相关的进程,关闭终端其子进随之关闭;
ps常用选项:
a 所有与终端相关的进程;
x 所有与终端无关的进程;
u以用户为中心组织进程状态信息显示;
常用组合一:ps aux
VSZ: 虚拟内存集;
RSS: 常驻内存集(不能放到交换内存中的);
TTY: 终端类型
STAT: 当前进程的状态
R running 运行中
S 可中断睡眠
D 不可中断睡眠
T 停止状态
Z 僵死状态
+ 前台进程(运行于终端之上且占据着命令提示符)
l 多线程进程
N 低优先级进程
< 高优先级进程
s session leader 一个会话的引导着
ps -e :显示所有进程
ps -f :显示完整格式的进程信息
常用组合:ps -ef
PPID:父进程的进程号
C : cpu的占用百分比
STIME:启动时间
TIME:累计运行时间
ps -F:显示完整格式的进程信息;
PSR:运行于哪颗cpu上
ps -H: 以层级机构显示进程的相关信息;
常用组合三:ps -eFH
常用组合四:ps -eo, axo
o后边跟可用参数,即要显示的字段列表,以逗号隔开
ps axo pid,ni,psr,pcpu,stat,comm,tty 等
ni:nice值;
pri:priority, 优先级;
rtprio:real time priority,实时优先级;
3)pgrep,pkill命令:进程过滤
pgrep [options] pattern
-u uid:effective user有效的用户进程
-U uid:read user 某用户启动的进程,只显示进程号
-t TERMINAL:与指定的终端相关的进程;
-l:显示进程名;
-a:显示完整格式的进程名;
-P pid:显示此进程的子进程;
pidof命令:
根据进程名,取其pid;
4)top命令:
字段含义:PR 优先级
NI nice指
VIRT 虚拟内存集
RES 常驻内存集
SHR 共享内存空间
S 当前状态
显示排序方式: P 以占用CPU百分比排序;
M 以占据内存百分比排序;
T 以累计占用CPU时间排序;
首部信息:uptime信息:l命令
tasks及cpu信息:t命令
内存信息:m命令
单个cpu占用显示 1
退出命令:q
修改刷新时间间隔:s
终止指定的进程:k
常用选项:
-d #:指定刷新时间间隔,默认为3秒;
-b:以批次方式显示;
-n #:显示多少批次;
5)htop命令:
选项:
-d #:指定延迟时间间隔;
-u UserName:仅显示指定用户的进程;
-s COLUME:以指定字段进行排序;
子命令:
l:显示选定的进程打开的文件列表;
s:跟踪选定的进程的系统调用;
t:以层级关系显示各进程状态;
a:将选定的进程绑定至某指定的CPU核心;
6)vmstat命令:vmstat 2 5 两秒显示一次共显示5次
各字段含义:
proc
r:等待运行的进程个数,cpu上等待运行的任务的队列长度(cpu性能);
b:处于不可中断睡眠状态的进程个数,被阻塞的任务队列的长度(I/O性能);
memory
swpd:交换内存的使用总量;(查看内存)
free:空闲的物理内存总量;
buffer:用于buffer的内存总量;
cache:用于cache的内存总量;(解决两个设备速度不对等)
swap
si:数据进入swap中的数据速率(kb/s)
so: 数据离开swap的速率(kb/s)
io
bi:从块设备读入数据到系统的速度(kb/s)
bo: 保存数据至块设备的速率(kb/s)
sysytem
in:中断速率,每秒几个
cs:上下文切换的速率
cpu
us:用户空间
sy:内核空间
id:空闲的空间
wa:等待i/o
st:被虚拟化偷走的空间
vmstat -s :显示内存统计数据
7)dstat命令:
dstat [-afv] [options..] [delay [count]]
常用选项:
-c, --cpu:显示cpu相关信息;
-C #,#,...,total
-d, --disk:显示磁盘的相关信息
-D sda,sdb,...,tobal
-g:显示page相关的速率数据;
-m:Memory的相关统计数据
-n:Interface的相关统计数据;
-p:显示process的相关统计数据;
-r:显示io请求的相关的统计数据;
-s:显示swapped的相关统计数据;
显示 --tcp 、--udp、--raw、--socket 、--ipc 相关信息
--top-cpu:显示最占用CPU的进程;
--top-io:最占用io的进程;
--top-mem:最占用内存的进程;
--top-latency:延迟最大的进程
8)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:
killall命令:
- kill processes by name
killall [-SIGNAL] program