狭义定义:进程是正在运行的程序的实例
广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动
此时你的计算机上运行着很多进程,那么计算机是怎么组织和管理那么多的进程的呢?
概念介绍:
进程控制块(PCB)
进程控制块(PCB)是系统为了管理进程设置的一个专门的数据结构。系统用它来记录进程的特征,描述进程的变化过程。同时,系统可以利用PCB来控制和管理进程
Linux
中的PCB叫做
task_struct,是一个结构体
所有运行在系统里的进程都以
task_struct
的形式存在内核里,并且都通过链表的方式连在一起
使用 ps -aux 显示进程信息:
PID 进程
id,用来唯一标识进程
TIME 该进程自启动以来所占用的总
CPU时间
COMMAND 该进程的命令名称
进程的几个状态:
R
运行状态
:
并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里
S
睡眠状态
: 意味着进程在等待事件完成
D
磁盘休眠状态:
有时候也叫不可中断睡眠状态
,这个状态的进程通常会等待IO
的结束,是一个深度休眠的进程,不可以被杀掉,等待其自动醒来
T
停止状态
: 可以通过发送
SIGSTOP 信号给进程来停止该进程。这个被暂停的进程可以通过发送 SIGCONT
信号让进程继续运行。
X
死亡状态
: 这个状态只是一个返回状态,你不会在任务列表里看到这个状态
Z僵尸进程: 子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入
Z
状态
下面我们通过系统调用自己创建进程
fork:
fork系统调用用于创建一个新进程,称为
子进程
fork不需要参数并返回一个整数值:
负值:创建子进程失败
零:返回到新创建的子进程
正值:返回父进程或调用者
所以 fork 之后通常要用 if 进行分流
getpid() getppid()也是系统调用,可以获取进程的进程id(PID) 父进程id(PPID)
一个简单的创建子进程的程序:(注意头文件)
孤儿进程:
父进程先退出,子进程就称之为
“
孤儿进程
”
孤儿进程被
1
号
init
进程领养
进程优先级:
cpu
资源分配的先后顺序,就是指进程的优先权(
priority
)
优先权高的进程有优先执行权利
配置进程优先权对多任务环境的
linux
很有用,可以改善系统性能
进程优先级相关概念:
竞争性
:
系统进程数目众多,而
CPU
资源只有少量,甚至
1
个,所以进程之间是具有竞争属性的。为了高效完成任务,更合理竞争相关资源,便具有了优先级
独立性
:
多进程运行,需要独享各种资源,多进程运行期间互不干扰
并行
:
多个进程在多个
CPU
下分别,同时进行运行,这称之为并行
并发
:
多个进程在一个
CPU
下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为并发
ps -l 查看进程:
各列代表的含义:
UID :
代表执行者的身份
PRI
:代表这个进程可被执行的优先级,其值越小越早被执行
NI
:代表这个进程的
nice
值,
表示进程可被执行的优先级的修正数值
PRI
值越小越快被执行,那么加入
nice
值后,将会使得
PRI
变为:
PRI(new)=PRI(old)+nice
这样,当
nice值为负值的时候,那么该程序将会优先级值将变小,即其优先级会变高,则其越快被执行 。
所以,调整进程优先级,在Linux
下,就是调整进程
nice
值。
nice
其取值范围是
-20至19
,一共
40
个级别
用
top
命令更改已存在进程的
nice
:
top
进入
top
后按
“r”–>
输入进程
PID–>
输入
nice
值
举例:修改31191的nice值为0: