linux学习之路之进程管理

什么是进程?

所谓进程就是将一个二进制文件加载到内存形成的一个个体,这就是一个进程。

在我们的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学习之路” 博客,谢绝转载!

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。