进程管理

什么是程序

一般情况下,代码,安装包等全部都是应用程序。	

什么是进程

进程即正在执行的一个过程。进程是对正在运行程序的一个抽象。

什么是线程

线程就是最小的执行单元

进程的三种状态

就绪态,阻塞态,运行态

18.进程管理_优先级

查看进程(ps)

ps (英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器

参数

-a         #显示一个终端的所有进程

-u         #选择有效的用户id或者是用户名

-x         #显示没有控制终端的进程,同时显示各个命令的具体路径。

-aux 一般情况下是一起使用,相同的参数组合还有一个 -ef 参数
$$   : 打印当前进程的PID

-ef 和 -aux之间的区别?

-ef  :  会打印出父级PID

-aux :  会打印出CPU、内存相关的使用情况

ps -aux

[root@localhost ~]#ps -aux
USER PID %CPU %MEM  VSZ   RSS TTY  STAT START   TIME COMMAND

18.进程管理_应用程序_02

USER : 指的是运行当前进程的用户

PID : 进程的编号

%CPU : CPU的占用率(指在单位时间之内占用CPU的时间比)

%MEM : 内存的占用率

VSZ : 应用程序向系统申请的内存(虚拟内存)

RSS : 应用程序实际上使用的内存大小

TTY : 应用程序正在使用的终端(?代表后台运行,也就是说不占用任何终端)

tty终端	: 操作系统的终端
pts终端	:虚拟终端

STAT : 进程的状态

R :正在运行状态(正在使用CPU)

S :睡眠状态

D   不可中断睡眠,即在睡眠的过程中不可以接收信号唤醒=》执行的IO操作得不到硬件设备的响应

T   停止的进程 

Z   僵尸进程

X   死掉的进程(几乎看不见,因为死了就立即回收了)

<   标注了<小于号代表优先级较高的进程

N   N代表优先级较低的进程    nice 设置进程的优先级-n : 设置具体的进程优先级  -20 ~ 20  数字越大优先级越小

s   包含子进程

+   +表示在前台运行的进程(前台运行就是指在命令行中运行)

l   小写字母l,代表以线程的方式运行,即多线程



START : 进程开始的时间

TIME : 进程占用CPU的总时间

COMMAND : 进程运行的命令,带[ ]号的代表内核态进程,不带[ ]号的代表用户态进程

实时查看进程的命令(top)

基本参数

-d  指定刷新的频率     (默认情况下,top命令是3秒刷新一次)
-p  查看指定进程的信息
-u  查看指定用户的进程
-n  查看指定top次数的信息

系统整体统计信息

18.进程管理_应用程序_03

[root@localhost ~]#top 
top - 16:55:19 up  1:33,  1 user,  load average: 0.00, 0.01, 0.05
Tasks:  93 total,   1 running,  92 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   995676 total,   819196 free,   105208 used,    71272 buff/cache
KiB Swap:  1572860 total,  1572860 free,        0 used.   779620 avail Mem 
up		: 启动
down	:停止

load average	: 系统负载

up左边的代表当前的时间
up右边代表运行了多长时间
load average: 0.86, 0.56, 0.78    CPU 1分钟,5分钟,15分钟平均负载
us 用户态进程占用cpu时间的百分比
sys 内核态进程占用cpu时间的百分比
ni 代表优先被调度的进程占cpu时间的百分比
id cpu空闲的百分比
wa cpu等待io的百分比
hi 硬件中断,处理硬件中断所占用CPU的时间
si 软件中断,处理软件中断所占用CPU的时间
st 被偷走的cpu
KiB Mem :  KiB Mem 
total 总内存
free 空闲内存
used 已使用
buff/cache 缓存的内存量
KiB Swap:显示swap交换分区信息
avail Mem 缓冲的交换区总量
PID:进程的ID。
USER:进程属主的名字。
PR:进程的优先级。
NI:进程的谦让度值。
VIRT:进程占用的虚拟内存总量。
RES:进程占用的物理内存总量。
SHR:进程和其他进程共享的内存总量。
S:进程的状态(D代表可中断的休眠状态,R代表在运行状态,S代表休眠状态,T代表跟踪状态或停止状态,Z代表僵化状态)。
%CPU:进程使用的CPU时间比例。
%MEM:进程使用的内存占可用内存的比例。
TIME+:自进程启动到目前为止的CPU时间总量。
COMMAND:进程所对应的命令行名称,也就是启动的程序名。

进程信息

VIRT:virtual memory usage 虚拟内存
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量


RES:resident memory usage 常驻内存
1、进程当前使用的内存大小,但不包括swap out(当某进程向OS请求内存发现不足时,OS会把内存中暂时不用的数据交换出去,放在SWAP分区中,这个过程称为SWAP OUT。当某进程又需要这些数据且OS发现还有空闲物理内存时,又会把SWAP分区中的数据交换回物理内存中,这个过程称为SWAP IN)
2、包含其他进程的共享
3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小


SHR:shared memory 共享内存
1、除了自身进程的共享内存,也包括其他进程的共享内存
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、计算某个进程所占的物理内存大小公式:RES – SHR
4、swap out后,它将会降下来,因为内存充裕了,大家就没必要合租内存了



DATA
1、数据占用的内存。如果top没有显示,按f键、然后用空格选中DATA项目、然后按q则可以显示出来。
2、真正的该程序要求的数据空间,是真正在运行中要使用的。

top 运行中可以通过 top 的内部命令对进程的显示方式进行控制

M   按内存的使用排序
P   按CPU使用排序
N   以PID的大小排序
R   对排序进行反转
f   自定义显示字段
1   显示所有CPU的负载
s   改变画面更新频率
1   展开CPU详情
m   改变内存的显示样式

h|?帮助
<    向前
>   向后
z   彩色

进程信号

什么是信号

简而言之,操作系统告诉进程怎么做,做什么的一种沟通方式。

kill 命令

kill就是发送信号的命令

kill -l

1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX	

HUP信号(SIGHUP)

id   :   1

完整的名字:SIGHUP

作用:
1、更新进程的配置

终止信号(INT、QUIT和TSTP)

INT 信号就是ctrl + c   停止进程
QUIT 信号就是ctrl + \  终断信号
TSTP 信号就是ctrl + z  终止进程

杀死信号(KILL和TERM)

KILL    :  杀死信号(直接回收内存,强制剥离CPU)
TERM    : 终止信号(优雅的死)

暂停和恢复(CONT和STOP)

CONT  恢复
STOP  暂停

$$ : 打印当前进程的PID

kill -9 pid
kill -s SIGKILL  pid

查看网络状态

安装网络调试工具

yum install net-tools

netstat -tnlp # 查看正在监听的,且使用tcp协议的进程

-t   tcp协议
-u   udp协议
-l   listen
-p   PID/Program name
-n   不反解,不将IP地址解析为主机名,不将端口号解析成协议名(80 ---> http)

僵尸进程和孤儿进程

僵尸进程

1、进程
2、进程的生命周期已经结束
3、进程依然站着PID不释放

0 - 65535 
pid的数量可以修改
一旦pid被使用完毕,则无法在启动其他进程

孤儿进程

1、孤儿进程的父进程已经结束而子进程还在运行。
2、在父进程的情况下被操作系统进程(pid = 1)进程接收