openKylin论坛

 找回密码

linux进程运行状态 [复制链接]

1.一个进程在其生存期内,可处于一组不同的状态下,称为进程状态
2.进程状态保存在进程任务结构的 state 字段中
3.当进程正在等待系统中的资源而处于等待状态时,则称其处于睡眠等待状态
4.在 Linux 系统中,睡眠等待状态被分为可中断的和不可中断的等待状态
5.运行状态( TASK_RUNNING ),当进程正在被 CPU 执行,或已经准备就绪随时可由调度程序执行,则称该进程为处于运行状态( running )
6.当系统资源已经可用时,进程就被唤醒而进入准备运行状态,该状态称为就绪态
7.内核态运行,用户态运行,就绪态这些状态在内核中表示方法相同,都被成为处于 TASK_RUNNING 状态
8.可中断睡眠状态( TASK_INTERRUPTIBLE ),当进程处于可中断等待状态时,系统不会调度该进程进行执行,当系统产生一个中断或者释放了进程正在等待的资源,或者进程收到一个信号,都可以唤醒进程转换到就绪状态(运行状态)
9.不可中断睡眠状态( TASK_UNINTERRUPTIBLE ),与可中断睡眠状态类似。但处于该状态的进程只有被使用 wake_up() 函数明确唤醒时才能转换到可运行的就绪状态。
10.暂停状态( TASK_STOPPED ),当进程收到信号 SIGSTOP 、 SIGTSTP 、 SIGTTIN 或 SIGTTOU 时就会进入暂停状态,可向其发送SIGCONT 信号让进程转换到可运行状态,在 Linux 0.11 中,还未实现对该状态的转换处理。处于该状态的进程将被作为进程终止来处理。
11.僵死状态( TASK_ZOMBIE ),当进程已停止运行,但其父进程还没有询问其状态时,则称该进程处于僵死状态。
12.当一个进程的运行时间片用完,系统就会使用调度程序强制切换到其它的进程去执行
13.如果进程在内核态执行时需要等待系统的某个资源,此时该进程就会调用 sleep_on() 或 sleep_on_interruptible()自愿地放弃CPU的使用权,而让调度程序去执行其它进程。进程则进入睡 眠状态( TASK_UNINTERRUPTIBLE 或 TASK_INTERRUPTIBLE )
14.只有当进程从“内核运行态”转移到“睡眠状态”时,内核才会进行进程切换操作
15.在内核态下运行的进程不能被其它进程抢占,而且一个进程不能改变另一个进程的状态。为了避免进程切换时造成内核数据错误,内核在执行临界区代码时会禁止一切中断


楼主
发表于 2013-11-21 14:35:12
回复

使用道具 举报

openKylin

GMT+8, 2024-5-14 06:18 , Processed in 0.018000 second(s), 17 queries , Gzip On.

Copyright ©2022 openKylin. All Rights Reserved .

ICP No. 15002470-12 Tianjin

快速回复 返回顶部 返回列表