进程有哪些状态?这个问题在面试的时候出现的概率也比较高。
如果你学过操作系统这门课,那一定看过这张图:
运行、就绪、阻塞指的就是进程的三种状态。 要想搞懂这三种状态,还得从操作系统的进程调度说起。
假设CPU是单核的,单核的CPU一次只能处理一件事情,但是在操作系统上往往有多个任务需要执行。
于是操作系统就会轮流让任务占用CPU,比如先让第一个进程占用CPU,运行个5ms,然后把它放一边去,再让第二个进程占用CPU,也运行个几毫秒。
因为轮转的速度特别快,所以在正常人看来,这些进程好像是在同时执行。
有了这个背景,再来看进程的状态就会比较容易。
所谓运行,就是进程占用CPU正在执行的状态。
所谓就绪,就是万事俱备,等待被操作系统调度的状态。
最后还有一种阻塞,比如程序在运行的时候,遇到了类似scanf这样阻塞的函数,需要等待用户从键盘输入,这个时候即使让他占用CPU运行,也是浪费时间,干脆就让它进入阻塞的状态,直到条件满足,也就是有用户输入了数据,再让它回到就绪的状态,等待被操作系统调用。
再来看下Linux下进程的状态。
这个分的就更细了,结合代码来说明。
int main() { while (1); }先来个死循环,运行起来,此时它是R的状态,表示正在运行,加号表示前台运行。
int main() { while (1) { printf(" "); } return 0; }此时变成了S状态,就是睡眠状态。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !