标签:eve 使用 查看 调用 height 操作系统 空闲 ati values
进程的基本状态:
从原理上讲,进程的基本状态有3个:
1) 运行:某个CPU空闲,该CPU对应的等待队列中的其中一个就绪态进程就得以调度。
2) 就绪:资源已就绪,只等CPU空闲。或者时间片用完,被加入队尾等待调度。
3) 阻塞:资源不满足,而被暂时挂起的状态,比如IO阻塞。也称为等待或睡眠状态。
Linux进程状态:
1) R: TASK_RUNNING,可执行状态,只有此类进程才可能被进程调度器选中执行。
每个CPU同一时刻只能选该CPU可执行队列中的其中一个进程运行。
R是Running or runnable的意思。
操作系统原理上习惯区分Running和Ready状态,在Linux上R状态同时涵盖了这两种状态。
2) S: TASK_INTERRUPTIBLE,可中断睡眠态。进程在等待某个事件的到来,处于CPU的等待队列中。
S是Interruptible Sleep的意思。等待的事件通常是某个信号量、某个socket连接等。
ps时系统中大部分进程都处于这个状态,原因是CPU个数有限,每个CPU只能有一个进程处于R状态,其余的只能处于S状态(?)。
3) D: TASK_UNINTERRUPTIBLE,不可中断睡眠态。
一个非常罕见的状态,通常很短暂,ps一般捕捉不到。
D是Disk Sleep的意思,意指由于IO资源得不到满足而处于等待中。vfork()后父进程会短暂进入该状态,直到子进程调用exit()或exec()。
该状态的威力在于kill杀不掉。
4) Z: TASK_DEAD - EXIT_ZOMBIE,退出状态。
Z是Zombie的意思,即僵尸。这也是一个非常短暂的状态,ps一般不捉不到。
进程在退出的过程中,都会先经过僵尸状态Z。子进程退出过程中,内核会给父进程发送一个信号通知父进程来收尸(通常是SIGCHLD)。父进程通过调用wait()或waitpid()来清理子进程在系统中残存的状态信息。
父进程调用fork()后让子进程先退出但不调用wait()或waitpid()则子进程就处于Z状态。
内核中的定义:
/usr/src/linux/fs/proc/array.c
static const char *task_state_array[] = {
"R (running)",
"S (sleeping)",
"D (disk sleep)",
"T (stopped)",
"T (tracing stop)",
"Z (zombie)",
"X (dead)"
};
ps中的释义:
PROCESS STATE CODES
Here are the different values that the s, stat and state output specifiers
(header "STAT" or "S") will display to describe the state of a process.
D Uninterruptible sleep (usually IO)
R Running or runnable (on run queue)
S Interruptible sleep (waiting for an event to complete)
T Stopped, either by a job control signal or because it is being traced.
W paging (not valid since the 2.6.xx kernel)
X dead (should never be seen)
Z Defunct ("zombie") process, terminated but not reaped by its parent.
进程的pid:
新创建进程的pid是逐渐递增的关系,刚释放的pid不会被立即占用,直到没有可用pid时才会从头找已释
放的pid使用。
因此,ps查看进程状态时两次pid相同,说明进程并未退出,而绝不会是退出后又被立即拉起。
换句话说,当前比如有两个进程pid(A)=123,pid(B)=124,进程B退出后,创建进程C时,pid(C)只会是
125,不会占用124这个pid。
标签:eve 使用 查看 调用 height 操作系统 空闲 ati values
原文地址:http://www.cnblogs.com/momo0609/p/7498963.html