一般来说进程的状态是如下图所示的
要想了解进程状态还是需要从某个具体的操作系统出发,详细的了解每个状态
从Linux内核来看
其中包含这么多的进程状态,
R - 状态 就是运行状态,表示可以在cpu上运行,但是不一定正在占用CPU,这是因为进程控制块是在一个运行队列中的,所以有可能在等着CPU来调用
S状态 和 D状态是两种不同的等待状态
S是表示可中断睡眠或者是浅度睡眠,在我们完成某种任务的时候,任务条件不具备,需要等待,所以是比如向外设中写入的时候,外设正在被调用,需要等待
D表示的是深度睡眠,就是不可以被操作系统杀掉。
我们把从运行状态中的task_struct,放到等待队列中,就叫做阻塞或者挂起
把从等待状态的task_struct,放到运行队列中,就叫做唤醒
T状态就是暂停,与等待状态不同的是,所有的数据都不更新,完全暂停
t就是打断点调试时候的一个状态
X和Z 停止的状态
X表示死亡状态,系统回收进程资源 = 进程的内核相关数据结构 + 代码和数据
Z表示僵尸状态,系统为了辨别死亡信息,所产生的一个状态,数据放在task_struct中
僵尸进程和孤儿进程
僵尸进程就是子进程结束,父进程没有执行回收,一种情况就是父进程等待,没有人回收子进程,所以就产生了僵尸进程,会不断的占用系统资源
孤儿进程就是,子进程还在运行,父进程已经被干掉了,这个时候1号进程就领养了这个进程,就是孤儿进程。