Linux的进程状态

版权声明:转载请声明 https://blog.csdn.net/qq_40732350/article/details/82077893

Linux 中的进程有以下几种状态

运行状态(TASK_RUNNING): 进程当前正在运行, 或者正在运行队列中等待调度。


可中断的阻塞状态(TASK_INTERUPTIBLE): 进程处于阻塞(睡眠) 状态, 正在等待某些事件发生或能够占用某些资源。 处在这种状态下的进程可以被信号中断。接 收 到 信 号 或 被 显 式 的 唤 醒 呼 叫 (如 调 用 wake_up 系 列 宏 : wake_up 、wake_up_interruptible 等) 唤醒之后, 进程将转变为 TASK_RUNNING 状态。


不可中断的阻塞状态(TASK_UNINTERUPTIBLE): 此进程状态类似于可中断的阻塞状态, 只是它不会处理信号, 把信号传递到这种状态下的进程不能改变它的状态。 在一些特定的情况下(进程必须等待, 直到某些不能被中断的事件发生), 这种状态是很有用的。 只有在它所等待的事件发生时, 进程才被显式的唤醒呼叫唤醒。

可终止的阻塞状态(TASK_KILLABLE): 这是Linux 内核 2.6.25 引入了一种新的进程状 态  。  状 态 的 运 行 机 制 类 似 于不可中断的阻塞状态, 只不过处在该状态下的进程可以响应致命信号。 它可 以 替 代 有 效 但 可 能 无 法 终 止 的 不 可 中 断 的 阻 塞 状 , 以及易于唤醒但安全性欠佳的可中断的阻塞状态。


暂停状态(TASK_STOPPED):进程的执行被暂停,当进程收到 SIGSTOP、SIGTSTP、SIGTTIN、 SIGTTOU 等信号时, 就会进入暂停状态。


跟踪状态(TASK_TRACED): 进程的执行被调试器暂停。 当一个进程被另一个进程监控时(如调试器使用 ptrace()系统调用监控测试程序), 任何信号都可以把这个进程置于跟踪状态。


僵尸状态(EXIT_ZOMBIE): 进程运行结束, 父进程尚未使用 wait 函数族(如使用 waitpid()函数) 等系统调用来“收尸”, 即等待父进程销毁它。 处在该状态下的进程“尸体” 已经放弃了几乎所有的内存空间, 没有任何可执行代码, 也不能被调度, 仅仅在进程列表中保留一个位置, 记载该进程的退出状态等信息供其他进程收集。


僵尸撤销状态(EXIT_DEAD): 这是最终状态, 父进程调用 wait 函数族“收尸”后, 进程彻底由系统删除。
它们之间的转换关系如图 所示

内核可以使用 set_task_state 和 set_current_state 宏来改变指定进程的状态和当前执行进
程的状态。
 


 

猜你喜欢

转载自blog.csdn.net/qq_40732350/article/details/82077893