目录
1.进程状态
1.运行态
运行态是:进程已经在运行队列中就叫运行态,代表着我已经准备好了,随时可以进行调度
2.终止状态
终止状态是:进程还在,但是永远不会运行了,随时等着被释放
但是有的人可能会想,为什么要维护一个永远不会终止态?他都不会运行了
因为释放进程其实是需要时间的,操作系统可能会很忙
3.进程堵塞
1.一个进程,使用资源的时候,可不仅仅是在申请cpu资源
2.进程可能申请更多的其他资源:磁盘,网卡,显卡,显示器资源,声卡/音响
如果我们申请cpu资源,暂时无法得到满足,需要排队的,这个叫做运行队列
那么如果申请其他慢设备的资源,申请不到,但是需要这个资源,也是需要排队的
当进程访问某些资源(磁盘网卡),该资源如果暂时没有准备好,或者正在给其他进程提供服务,此时:1.当前进程要从runqueque中移除 2.将当前进程放入对应设备的描述结构体中的等待队列,cpu速度其实非常,其实因为硬件速度太慢了,完成一个进程cpu可能连一秒都不需要
那么了解下面的概念,
进程堵塞是:当我们的进程此时在等待外部资源的时候,该进程的代码,不会被执行,在我们应用层上看到就是,我们被卡住了,这个就是进程阻塞
4.进程挂起
如果内存不足了怎么办?
操作系统就要帮我们进行辗转腾挪
进程挂起:辗转腾挪意思是:短期内不会被调度(你等的资源,短期内不会就绪)进程,它的代码和数据依旧在内存中,就是白白的浪费空间,操作系统就会把该进程的代码和数据临时置换到磁盘上这就是进程挂起
2.linux进程状态
Linux 下的主要进程状态有:
R状态 运行态
process代码
#include <stdio.h>
#include <unistd.h>
int main()
{
while(1)
{
printf("hello pid:%d!\n",getpid());
sleep(1);
}
}
makefile
process:process.c
gcc -o process process.c
.PHONY:clean
clean:
rm -f process
运行结果
按我们的想法R应该是运行状态毕竟是run!但是上面显示是S,意思是sleep睡眠模式,为什么,有人说可能是slppe(1)的问题,其实把sleep(1)给取消掉了,也还是S,