标签:主要介绍进程如何工作的
什么是进程?
所谓进程就是将一个二进制文件加载到内存形成的一个个体,这就是一个进程。
在我们的linux系统中,系统只识别二进制文件,所以一个系统要想正常的运行时,必须启动一些二进制文件,从而形成进程,在以这些进程的方式去执行相应的任务。
我们常常听到所谓的程序,那么程序和进程是什么关系呢?
刚刚说过进程是由二进制文件加载到内存中形成的。而这些二进制文件就是程序。
可以这么来理解:
程序是实实在在地文件,是存放在磁盘上的。
进程是一个逻辑概念,进程是存在内存当中的,所以当机器重启,这些进程也随之销毁了。而程序不会,因为他们始终存在磁盘上的。
我们知道在我们的系统上,可以同时运行多个程序,进而会产生多个进程,而这些进程最终都会交给CPU处理,但是我们的CPU却只有一个,那么这些CPU是如何处理这些进程的呢?
刚刚说过进程是存在内存当中的。而内存是一块地址空间,所以我们的进程在内存中都占用了一段地址空间,用来存在进程数据。而这些将要被执行的进程放在CPU的可执行队列中,CPU逐个进行处理。并且内核为这些每一个进程分配一段时间,这样CPU可以有效的处理每一个进程,避免CPU长时间的消耗在处理某个进程上。
进程是有进程状态的,进程共有一下5种状态:
1、TASK_RUNNING:处于这种状态下的进程正在被CPU执行或者将要被CPU执行
2、TASK_INTERRUPTIBLE:叫做可中断的睡眠状态。这种状态下的进程处于睡眠状态直到其他条件
或者事件完成时才会被CPU处理。或者当某个进程已经被CPU处理完了,而内核分配处理的这些
进程时间过长,这些进程也会处于睡眠状态。而进程在睡眠状态下,CPU可以去处理其他进程。
3、TASK_UNITERRUPTIBLE:不可中断的睡眠状态。处于该状态下的进程是不可中断的,因此该进
程一直等待接受其他信号,因此CPU一直处于等待状态。
4、TASK_STOPPED,TASK_TRACED:停止或者跟踪状态。
当进程收到一个SIGSTOP信号时,该进程处于停止状态
当某个进程被他所监控或者跟踪的进程所操作时,该进程处于TASK_TRACED状态
5、TASK_DEAD,TASK_ZOMBIE,僵尸状态:处于该状态下的进程执行完毕后,并不释放所占有的
内存空间,因此会导致物理内存的容量变小。
那么如何观察进程的使用情况呢?
可以使用ps命令来查看
不过ps只可以静态的查看进程的使用情况,也就是说ps命令只能显示某一时刻的进程使用状况。不能够动态的显示进程的使用情况,要想动态的显示进程信息,可以使用top命令来查看。
语法格式:ps [option]
其中ps命令分为BSD风格的和SysV风格的
BSD风格的选项有:
a:显示所以与终端有关的进程
u:显示这个进程的属主
x:显示与终端无关的进程
l:长格式来显示
通常ps aux一起使用
例如:
其中每一列表示的字段意思如下:
USER:表示该进程被哪个用户运行
PID:该进程的ID号,用来标识该进程的
%CPU:该进程使用掉的CPU资源的百分比
%MEM:该进程使用掉的物理内存的百分比
VSZ:表示 该进程使用掉的虚拟内存空间大小
RSS:表示常驻内存空间大小,就是该进程占有的固定内存大小,该空间是不能交换出去的
TTY:表示该进程是在哪个终端下运行的
STAT:表示该进程的所处状态
START:表示该进程启动到现在为止所经过的时间
TIME:表示该进程实际使用CPU运作的时间
COMMAND:表示执行该进程的实际指令是什么
SysV风格的选项有:
-e:与-A一样,显示所有的进程
-l:以长格式的形式显示,可以显示自己的bash相关进程
-F:额外的全部格式,就是显示的列多一些
-f:与-F类似,显示的列少一些
其中这些字段的意思为:
F:表示这个进程的旗标,说明这个进程的总结权限,常见的号码有:
4:表示该进程的权限为root
1:表示该子进程只进行复制(fork)而没有实际执行(exec)
S:表示进程的状态,其中:
R:表示该进程处于运行状态
S:表示可中断的睡眠状态
D:表示处于不可中断的睡眠状态
T:表示该进程处于停止状态
Z:表示该进程处于僵尸状态,该进程所占有的内容空间不能移除掉
PID:该进程的ID号
PPID:该进程的父ID号
C:表示CPU的使用率,单位为百分比
PRI:表示进程的优先级,值越小越优先被CPU处理
NI:nice值,nice值是可以用来调整进程的优先级的
ADDR:表示该进程在内存中的地址范围,当进程处于RUNNING状态时该处显示‘-‘
SZ:表示该进程使用掉的内存大小
WCHAN:表示该进程是否在运作,‘-‘表示该进程正在运行
RSS:常驻内存空间大小,该大小不能被交换出去
STIME :该进程启动到现在所经过的时间。
TTY:表示该进程是在哪个终端下运行的
TIME:表示实际该进程使用CPU的时间
CMD:表示执行该进程使用的指令是什么
ps -o 属性1,属性2...
用来显示进程指定的属性信息,默认ps只显示前台的进程,因此显示的进程比较少。
通常可以和ax选项结合使用,显示所有的进程的指定属性信息
例如:显示所有的进程的pid,comm,ni属性信息,且只显示5行。
刚刚说过ps命令只能查看某一时刻进程的使用信息,不能动态的显示进程的使用信息,要想动态的显示进程的使用信息则使用top命令来查看
top:动态的观察进程的变化
语法格式:top [option]
-d #: 指定延时时长,单位为秒,指的是每个多少秒显示一次,默认是5秒
-b:以批模式的形式显示,就是一页接着一页显示
-n #:在批模式下,共显示多少批
在top命令下,还可以使用很多的子命令
M: 根据驻留内存大小进行排序
P:根据CPU使用百分比进行排序
T: 根据累计时间进行排序
l: 是否显示平均负载和启动时间
t: 是否显示进程和CPU状态相关信息
m: 是否显示内存相关信息
c: 是否显示完整的命令行信息
r:修改进程的优先级
q: 退出top
k: 终止某个进程
第一行显示的信息有:
当前的系统时间
开机启动到现在所经过的时间
有多少个用户登入到系统上了
该进程在1,5,15分钟内的平均工作负载值,该值越小,表示系统越空闲
第二行显示的信息有:
目前系统上有多少个进程
这些进程所处的进程状态是什么
第三行显示的信息有:
CPU的整体负载情况
第四行显示的是物理内存使用的情况
第五行显示交换分区使用情况
在top下部分的画面中只介绍一个字段的意思,其他字段跟上面字段的意思大致相同
TIME+:表示进程实际使用CPU的时间累加和。 (说明该进程可能被重复使用)
在上面我们提到了priority和nice的概念,这个属性都与进程的优先级有关系的。
我们知道进程是在内存中形成的,而进程要被CPU处理,必须要先进入CPU的可执行队列中,然后CPU在逐个处理可执行队列中的进程。也就是说那些要被处理的进程全部都会进入到CPU的可执行队列中,而默认情况下,CPU根据进程在队列中的顺序来处理这些进程。所以,在某些情况下,一些比较重要的进程可能会比较晚处理,而那些不重要的进程会优先处理。这显然不符合用户的心意。因此为了让CPU能够优先处理某些进程,于是就给每一个进程优先级,优先级值越小,该进程越先被CPU处理。
在Linux系中,进程的优先级的范围为0-139.其中100-139有用户来控制的,0-99则是由内核来控制的
而一个进程的新优先级是有原来的优先级和nice值组成的。
(new)priority=(old)priority+nice
在这里nice值的范围为-20--19
其中root用户的可调整的nice值为-20--19
普通用户可调整的nice值为0-19,且普通用户只能将nice越调越高,不能调低
因此改变某个进程的优先级,只需要改变nice值即可。
改变nice值有2种方式
1、在启动进程的时候指定nice值
语法格式:nice [-n #] COMMAND
2、调整已经启动的进程的nice值
语法格式:renice NI PID
例如修改top这个进程的nice为5
进程的管理
其实进程之间是可以相互控制的,进程间的相关管理是通过发送一个讯号(Signal)来实现的,不同的Signal表示的意思不一样。主要常见的讯号Signal代号和名称有:
1:SIGHUP:让一个进程不用重启,就可以重读其配置文件,并让新的配置信息生效
2:SIGHINT:类似与命令行中使用ctrl+c来中断一个进程
9:SIGKILL:强制杀死一个进程
15:SIGTERM:终止一个进程(该进程正常退出来完成终止),该讯号为默认讯号
本文出自 “linux学习之路” 博客,谢绝转载!
标签:主要介绍进程如何工作的
原文地址:http://xslwahaha.blog.51cto.com/4738972/1440257