理解进程定义:进程是一个程序的一次执行的过程,同时也是资源分配的最小单元。
程序与进程的区别:程序是静态的,是一些指令的有序集合。进程是动态的,是程序的执行过程,包括动态创建、调度和消亡的整个过程。一个程序可以被执行多次,可以对应多个进程。
理解进程状态:进程在运行中不断地改变其运行状态。通常,一个运行进程必须具有以下三种基本状态:运行态、就绪态、阻塞态。实际操作系统中都超过三种状态,例如Linux操作系统中一般有6种状态。
第1步 感受进程的存在,观察进程的状态。
部分列标题含义
USER:用户
PID:进程号
%CPU:进程占用的CPU百分比
%MEM:占用内存的百分比
STAT:进程状态 例如S 处于休眠状态;R 正在运行;Z 僵尸进程不存在但暂时无法消除
COMMAND:命令
通过多次运行ps aux命令,观察如下现象:
(1)进程号不重复,唯一。
(2)进程状态:多种
(3)1号进程的命令init不变
第2步 在终端输入top,回车,查看动态进程信息。
使用下列命令更新top
按下P:按%CPU排序
按下M:按%MEM排序
按下空格:马上刷新(默认3秒)
按下q:退出(默认的top会一直占用当前端口)
按空格手动刷新,按P实现按%CPU排序,观察现象:
(1)观察大部分情况下只有一个进程处于R状态,大部分情况下CPU的占用率都不高,意思是CPU比较闲。在单核CPU中,某一个时刻只能有一个进程占用CPU即处于运行态R,操作系统书上的理论都是指的单核CPU。
(2)但实际中是多核的CPU,所以实际中应该有一个时刻运行多个进程的情况即并行。使用top命令动态观察是否有出现两个及以上的进程处于R态,并捕捉类似的截图。
(3)进程号不重复,唯一。
第3步 利用管道增加条件查询
(1)ps aux | grep init,多次执行得到的结果都是init的进程号是1号。
(2)启动firefox后,查询firefox对应的进程号是多少?
3)关闭firefox,再启动后,查询firefox对应的进程号是多少?两次进程号一样吗?
第4步 自己编写程序测试,一个程序可以对应多个进程。
(1)编写测试程序:pstest.c
(2)编译测试程序
(3)开始测试
打开3个终端,都运行这一个程序,再打开第4个终端查询这个名字的进程有几个,会发现有3个进程号不同的进程,而最后一列却是同一个可执行文件。
第5步 kill -9 进程号,杀死上一题创建的进程./pstest,要先查询进程号。
第6步 使用proc文件系统查看进程信息
Proc只存在于内存当中,它以文件系统的方式提供应用程序访问系统内核数据的操作接口。Proc动态地从系统内核读出所需要信息并提交给应用程序。
(1)运行/home/tarena/pstest文件,打开另一个终端观察ls /proc中有一个它的进程号文件夹。
(2)如果使用kill杀死pstest对应的进程,则/proc下对应的进程号文件夹也消失
(3)cat /proc/self/status 查看系统当前进行状态,状态信息非常的多,相当于是进程控制块PCB的内容。
第7步 使用进程的创建函数、退出函数编写程序
第8步 测试程序截图