Bootstrap

Linux五种状态

linux五种状态
Linux进程的状态
简单的来说,linux的5种状态分别是,运行,中断,不可中断,僵尸,停止状态
在Linux系统中,一个进程被创建之后,在系统中可以有下面5种状态。进程的当前状态记录在进程控制块的state成员中。
就绪状态和运行状态
运行状态,顾名思义就是程序进入运行队列,等待运行。

就绪状态的状态标志state的值为TASK_RUNNING。此时,程序已被挂入运行队列,处于准备运行状态。一旦获得处理器使用权,即可进入运行状态。

当进程获得处理器而运行时 ,state的值仍然为TASK_RUNNING,并不发生改变;但Linux会把一个专门用来指向当前运行任务的指针current指向它,以表示它是一个正在运行的进程。

可中断等待状态
中断状态,这个和单片机的中断程序很像,就比如你正在家里看电视,然后有人敲门,然后你停下来看电视去开门,这就是一个中断请求和中断服务,生活中到处都是。

状态标志state的值为TASK_INTERRUPTIBL。此时,由于进程未获得它所申请的资源而处在等待状态。一旦资源有效或者有唤醒信号,进程会立即结束等待而进入就绪状态。

不可中断等待状态
不可中断,第一次见到这个名词,给我的感觉就是,你正在打王者荣耀排位,然后你妈妈叫你去拿东西,然后你没有回应,这个就是不可中断,表明你不受别的中断的打断。

状态标志state的值为TASK_UNINTERRUPTIBL。此时,进程也处于等待资源状态。一旦资源有效,进程会立即进入就绪状态。这个等待状态与可中断等待状态的区别在于:处于TASK_UNINTERRUPTIBL状态的进程不能被信号量或者中断所唤醒,只有当它申请的资源有效时才能被唤醒。

这个状态被应用在内核中某些场景中,比如当进程需要对磁盘进行读写,而此刻正在DMA中进行着数据到内存的拷贝,如果这时进程休眠被打断(比如强制退出信号)那么很可能会出现问题,所以这时进程就会处于不可被打断的状态下。

停止状态
停止状态,就像windows的后台挂起一样,虽然你没看到他运行,但是他在后台挂起,等待运行状态的响应。
状态标志state的值为TASK_STOPPED。当进程收到一个SIGSTOP信号后,就由运行状态进入停止状态,当受到一个SIGCONT信号时,又会恢复运行状态。这种状态主要用于程序的调试,又被叫做“暂停状态”、“挂起状态”。

中止状态
中止状态,像windows在任务管理器中强制结束某个无响应的程序,像僵尸一样没有反应
状态标志state的值为TASK_DEAD。进程因某种原因而中止运行,进程占有的所有资源将被回收,除了task_struct结构(以及少数资源)以外,并且系统对它不再予以理睬,所以这种状态也叫做“僵死状态”,进程成为僵尸进程。

;