Linux进程(1)

首先进程是分配资源的基本单位,而进程控制块PCB(结构体task_struct)是用来描述进程的,所以进程控制块是用来描述进程的资源的(包括内存空间、文件资源、文件系统、信号)等等,还包括自身的(进程ID),说到进程的ID就应该想到进程的ID是有限的,如果进程的ID分配完了,那么操作系统就运行不了其他进程了(因为没有进程的ID可分配)。

进程控制块PCB(即结构体task_struct)的管理有多种结构:包括链式结构(遍历进程方便)、树形结构(查找父进程方便)、哈希结构(利用进程的ID查找进程方便)

Linux中的进程的状态有六种(就绪、执行、深度睡眠(只能由等待的资源满足条件唤醒,不能用信号唤醒)、浅度睡眠(可以被信号或者由等待的资源条件满足后唤醒)、停止(作业控制,被其他进程发信号暂停)、僵死(进程已经运行结束了,所有的资源已经释放了,还保留了描述进程的task_struct结构))

对比:停止态和睡眠状态

停止态:是由其他进程发信号终止当前进程的执行。唤醒的时候也是由其他进程发信号唤醒(cpulimit就是利用停止态来控制进程对CPU的使用率的)

睡眠状态:进程正在执行,发现要等待资源,此时进程主动进入睡眠状态,等待资源满足条件后才唤醒进程。

僵尸进程代表进程已经结束运行了,资源已经释放了,但是描述进程的task_struct数据结构还存在, 要等待父进程利用wait系统调用来回收子进程的task_struct。僵尸进程存在的原因是task_struct还存在,父进程可以利用僵尸进程的task_struct查到子进程的结束原因

内存泄漏:内存泄漏是指进程在运行期间,运行时间越长,耗费的内存越多,而不是进程死了,内存没释放,进程死掉之后资源会被操作系统自动回收

比如:写了一个浏览器,这个浏览器每次打开一个网页就申请90K和10K内存,但每次关一个网页90Kfree掉了,但是10K没有free所以每开关网页就泄漏了10K的内存。随着开关网页越多泄漏的内存也越多

检查内存泄漏的方法:多点采样法,每隔一段时间检查一次内存的耗费情况,如果随着时间的推移耗费的内存越来越多就是内存泄漏了

内存耗费振荡收敛:正常

内存耗费发散的:内存泄漏

打印6次

打印:acbc 

 

猜你喜欢

转载自blog.csdn.net/wllen_/article/details/81510607