deactive_task使用场景
__schedule处理中, deactive_task用于将当前的任务从rq中删除,如下流程图,在非内核抢占且当前任务不处于运行状态,如果当前任务存在待处理的信号量,要将这个任务状态设置成TASK_RUNNING,没有则调用deactive_task,将当前任务从rq中删除。
task_struct中的state字段描述进程的当前状态,进程一共有五个状态:
state | state description |
---|---|
TASK_RUNNING | 运行:进程是可执行的;它正在执行或者在运行队列中等待执行 |
TASK_INTERRUPTIBLE | 可中断睡眠: 进程正在睡眠,即它被阻塞,等待某些条件达成,一旦条件达成,内核就会把进程状态设置成可执行 |
TASK_UNINTERRUPTIBLE | 不可中断睡眠:除了即使接收到信号也不会投入运行,该状态与可终端睡眠状态相同 |
TASK_TACED | 被其他进程跟踪的进程 |
TASK_STOPPED | 进程停止执行 |