进程概念
什么叫做进程?我们在了解这个概念之前先要明白计算机CPU的工作原理,我们的程序在执行时,先将程序加载到内存中,之后CPU进行分时处理,那么什么又是分时处理呢,如果只有一个内核的情况下,但有多个程序需要执行该如何操作呢?是等一个程序执行完在进行下一个吗?当然不是,如果这样的话,当一个程序出现死循环的话让下一个程序情何以堪?所以计算机中采取轮循
的方式执行程序,即分为不同的时间片进行程序的执行,先执行第一个程序,执行完一个时间段后保存当前程序的信息进行下一个程序,在下一个时间片
在回过头来执行上一个程序,反复横跳切换,这个切换的时间是非常短的,凭肉眼法发现的。我们将这个程序当前执行的相关信息全部保存在PCB
(process control block)中。每一个程序都有一个专属的PCB,pcb即程序控制块
,包含着程序进行的一些描述信息(包括标示符、优先级、内存指针、上下文数据、程序计数器、标识符、状态等等)。
因此对于用户而言,进程就是运行中的程序;而对于操作系统而言,进程就是一个程序运行的描述,通过这个描述,操作系统可以找到当前程序的状态,以此调度处理。
进程中相关操作
进程的创建
使用fork()
,可创建当前进程下的子进程,父子进程代码共享,即子进程复制了当前进程pcb的大部分内容,可以继续执行当前进程的后续内容。
返回值
fork()具有两个返回值,对于子进程,返回0
,对于父进程来说返回子进程的pid
,因此一般通过if
判定来区分父子进程。
举例
进程的分类
即进程在执行中所处的不同的状态。
运行态(R)
正在运行或者轮转到时间片能够执行的运行统称为运行态
可中断休眠态(S)
可以被中断的休眠状态,满足唤醒条件或者休眠被中断则进入运行态
不可中断休眠态(D)
不能被中断的休眠状态
停止态(T)
程序停止运行,依旧会被调度,但是什么也不做
僵尸态(Z)
进程已经退出不在调度了,但是其公共资源还没有被释放,等待处理的一种状态,其中典型的为僵尸进程。
查看进程
- 通过/proc系统文件进行查看
ls /proc/
- 通过系统调用
geipid() //获取当前进程id
getppid() //获取父进程id
- 通过ps 指令集进行查看
ps aux 观察系统所有的进程
ps -lA 详细的列出所有的系统进程
ps +参数选项 根据某些规则输出进程信息
【参数选项】
-A
:显示所有进程-a
:不与 terminal 有关的所有进程;-u
:有效使用者 相关的进程x
:通常与 a 一起使用,列出较完整信息-l
: 详细列出PID 的信息-j
:以工作表的方式输出-f
:输出一个更加完整的进程查看
参数含义
USER
:该进程的归属者名字
PID
该进程的进程标识符
%CUP
:该进程所占用的CPU资源
%MEM
:该进程所占用的物理内存
VSZ
:该进程所占用的虚拟内存大小
RSS
:该进程占用的固定内存量
TTY
:表示该进程与终端的关系,若不占用当前终端则显示 ?,若为 pts/0 等,则表示该进程是由网络连接进主机的进程。
STAT
:该进程的状态,即上文所说的进程的分类
START
:该进程开始的时间
TIME
:该进程实际使用CPU的时间
COMMAND
:该进程的实际指令是什么