进程:即process,由于系统的资源是有限的,所以要合理的分配有限的资源,这也是需要进程管理的原因。
进程的资源: CPU一般是命令的处理。
内存 32bit的CPU所能支持的最大内存为4G。
一个进程可以理解为一个程序,进程与进程在内存中不知道对方的存在,在LINUX里进程调度(scheduling)是内核中非常重要的一个系统。举个例子来解释下进程之间的调度。
对于FTP服务器,要经常的读写,属于I/O密集型,而高清电影则需要解码,所以需要占用CPU较大的资源。这里引入进程优先级的概念,比如一边看电影,一边聊QQ,想象一下,如果CPU全力解码,是不是不会延迟处理键盘的输入信息? 这时候,CPU尽量给电影,但是QQ的优先级更高,在这里,QQ的I/O被缩短了,但是相应的优先级别更高了,这也是可以一边聊QQ一边看电影的原因。
进程有限级分为:静态优先级和动态优先级,在LINUX中用数值分别代表他们的优先级,数值越小优先级越高。
静态优先级:100~139,可以手动调整,有一个数值nice,专门用来表示可以增加或减少优先级数值的大小。
动态优先级:0~99 被称为实时优先级,动态优先级永远大于静态优先级
nice值的范围为-20~19,普通用户只能调高自己的nice值,只有root用户有权调低。
调整NICE值命令
nice -n 6 COMMAND //只有管理员才可以降
renice : 对已经启动过的进程调整nice值
renice N PID //打算将nice调整到几
#为什么叫nice值,可以这样理解,一个进程优雅的把自己的资源让给了别的进程,这个动作很优雅(nice)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
查看进程的命令ps:
ps命令由于当时UNIX两大阵营的分隔,各自出现了一种书写风格 :sys V风格(无-)和BSD风格(有-)
ps : process state
-e show all process
a 和终端无关的进程
x 和终端有关的进程
-u 显示进程发起用户
-F 显示额外信息你
-f 显示完整信息
j 以作业的方式显示
h 显示进程间的关系
o 自定义显示一方面信息
pstree 显示当前进程数
常用的组合
ps -eo pid //%cpu,comm
ps eF
ps -ejh
ps axjf
ps aux //最常用的ps命令
ps里的各项数值说明
PID:进程号 PPID:父进程TTY终端设备STAT:程序运行状态 RRS:实际内存占用 VSZ:虚拟内存占用
对于STAT分为:运行态 running
就绪态 ready I/O完成
停止态 stopped 必须管理员手动唤醒
睡眠态 sleep 等待用户输入数据或者正在读取硬盘数据
sleep不可以直接进入running
sleep: 不可中断 uninterruptible sleep
可中断 interruptible sleep
D:不可中断的睡眠
R:正在运行或准备好运行
R:可中断的睡眠
T:停止态
Z:Zombie僵尸态
< : 高优先级进程
N : 低优先级进程
+ : 属于某一个前台进程组的进程
s :某一个进程组的leader进程
l :多线程的进程
成为僵尸进程的原因 : 1 进程执行完了没有释放内存
2 进程正在释放内存(正常)
进程的有趣现象 : linux里父进程回收子进程:白发人送黑发人
孤儿进程orphin:父进程死了,子进程还存在
init进程负责回收orphin,它是一切进程的父进程,所有的进程都是通过复制它而来