进程状态转换

进程:
进程是运行的程序,是动态的,在内存(辅存)中执行的,可以被cpu调度和分配的实体.

进程是系统进行资源分配和调度的独立单位.
PCB是进程存在的唯一标识.

进程状态:


新建:
      即新建立一个进程.操作系统会将标识号关联到进程,分配和创建管理进程所需要的所有 的表.处于新建状态的进程,操作系统中包含了管理该进程的信息,但是进程还在辅存中,未调入内存.

退出:
   当进程结束时(无论正常还是非正常),操作系统将保存与该进程相关的信息,然后将该进程从操作系统中删除.

就绪:进程在辅存中,等待cpu调度执行.
运行:正在执行的程序,微观上看,某一时刻一个cpu上仅有一个进程在执行.
阻塞:等待某一个事件发生,进程在主存中.
阻塞挂起:进程等待某一时间,并且在辅存中.
就绪挂起:一切准备就绪,但是进程在辅存中,等待调入内存.


linux进程状态转换图:
Linux进程有六种状态:

运行状态(R:task_running,可执行状态):
      只有该状态的进程才能在CPU上运行,同一时间可能有多个进程处在该状态.这些进程的task_struct放在对应的可执行队列中 .
 
可中断睡眠状态(S:task_interruptible)
    因为等待某个事件发生而被挂起.这些进程的task_struct放在对应的等待队列中去.

不可中断睡眠状态(D:task_interruptible)
    进程因为等待某个事件而被挂起,处在睡眠状态,但是此进程是不能被中断的:即不能响应异步信号.所以使用kill是杀不死的.
    一般用在内核操作中,有些内核操作是不能被打断的,一般情况下,这种状态是非常短暂的,一般不会被ps捕捉到.等待内核操作结束返回时候,才通知signal.

暂停状态(T:task_stop or task_traced)
    向进程发送一个sigstop信号,他会响应进入task_stop状态(sigstop和sigkill非常强制,是不允许被用户通过signal系列的函数重新定义的),向进程发送sigcont信号,进程由task_stop状态恢复到task_running状态.
    当进程正在被跟踪时候,处在task_traced状态.例如GDB调试进程的时候.task_traced不能被信号sigcont唤醒.

僵尸状态(Z:task_dead  exit_zomb)
    在Linux中还有一种进程,他已经释放了所有资源,并且没有代码段和数据段,但是进程表中还存放着他的数据,即他仅占用进程表,这就是僵尸进程.当父进程活着,而子进程却死掉的时候,子进程会变成僵尸进程.
    僵尸进程的用处:等待用户收集进程留下的信息,而这些信息有时候是非常有用的.
    危害:当僵尸进程过多的时候会占满进程表,从而使系统崩溃.
    解决方法:双fork,wait/waitpid,重写sigchild信号+wait/waitpid用于处理僵尸进程.

退出状态(X:task_dead or exit_deaded)
    进程在退出过程中,可能会变成僵尸状态,也可能会变成退出状态.然后释放所有资源,包括进程表中的相关内容.
    这种状态非常短暂,几乎不可能被ps查看到. 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值