一、进程的状态:
1、操作系统中:
进程是一个动态的实体,所以他是有生命的。从创建到消亡,是一个进程的整个生命周期。在这个周期中,进程可能会经历各种不同的状态。一般来说,所有进程都要经历以下的3个状态:
(1)就绪态。指进程已经获得所有所需的其他资源,正在申请处理处理器资源,准备开始执行。这种情况下,称进程处于就绪态。
(2)阻塞态。指进程因为需要等待所需资源而放弃处理器,或者进程本不拥有处理器,且其他资源也没有满足,从而即使得到处理器也不能开始运行。这种情况下,进程处于阻塞态。阻塞状态也称休眠状态或者等待状态。
(3)运行态。进程得到了处理器,并不需要等待其他任何资源,正在执行的状态,称之为运行态。只有在运行态时,进程才可以使用所申请到的资源。
2、在Linux系统中,将各种状态进行了重新组织,由此得到了Linux进程的几个状态:
- R(runing):进程处于运行或就绪状态。也就是上面提到的运行态和就绪态进程的综合。一个进程处于RUNNING状态,并不代表他一定在被执行。由于在多任务系统中,各个就绪进程需要并发执行,所以在某个特定时刻,这些处于RUNNING状态的进程之中,只有一个能得到处理器,而其他进程必须在一个就绪队列中等待。即使是在多处理器的系统中,Linux也只能同时让一个处理器执行任务。
- D(disk sleep)UNINTERRUPTABLE:不可中断阻塞状态。被阻断而等待一个事件,不会被信号激活,除了I/O信号,处于这种状态的进程正在等待队列中,当资源有效时,可由操作系统进行唤醒,否则,将一直处于等待状态。
- S(sleeping)INTERRUPTABLE:可中断阻塞状态。被阻断而等待一个事件,可能会被一个信号激活,与不可中断阻塞状态一样,处于这种状态的进程在等待队列中,当资源有效时,可以有操作系统进行唤醒。与不可中断阻塞状态有所区别的是,处于此状态中的进程亦可被其他进程的信号唤醒。
- T(stopped):挂起状态。进程被暂停,需要通过其它进程的信号才能被唤醒。导致这种状态的原因有两种。其一是受到相关信号(SIGSTOP,SIGSTP,SIGTTIN或SIGTTOU)的反应。其二是受到父进程ptrace调用的控制,而暂时将处理器交给控制进程。
-
t(tracing stop):追踪停止
-
X(dead) : 进程已经完全死掉, 这个永远看不见
- Z(zombie):僵尸状态。表示进程结束但尚未消亡的一种状态。此时进程已经结束运行并释放掉大部分资源,但尚未释放进程控制块。
3、每个进程都把它的信息放在 task_struct 这个数据结构里,task_struct 包含了这些内容:
- 状态(任务状态,退出代码,退出信号。。。)
- 优先级
- 进程id(PID)
- 父进程id(PPID)
- 子进程
- 使用情况(cpu时间,打开的文件。。。)
- 跟踪信息
- 调度信息
- 内存管理信息