- 论坛徽章:
- 0
|
本帖最后由 71v5 于 2014-06-25 21:01 编辑
回复 2# lsstarboy
有错误的话麻烦指正一下,共同学习:
其实下面的字符串是用来描述thread此时此刻不能运行的原因,在内部实现中就是"Reason for sleep":
uwait:初步看了一下,是因为thread调用了_umtx_op系统调用。
nanslp: 表示thread调用了nanosleep系统调用,就是定时任务的实现,等待被调度运行,典型就是cron。
piperd:表示thread此时此刻要读取一个pipe,但是该pipe中没有数据可读。
pipewr:表示thread此时此刻要写一个pipe,但是该pipe中没有空间。
pause:表示thread调用了sigsuspend系统调用。
ttyin:这个是getty thread等待一个入方向的连接。
select:thread执行了select系统调用。
下面是用来描述此时此刻thread的状态,top命令实现是用下面的数组来描述的,不过内核中不是这样来描述的,这个就牵扯到fork的具体实现了,大概说一下吧,
在fork一个进程时,需要经历一系列阶段,每个阶段完成后,都要更新thread的状态,这个内部状态具体和下面的数组是怎么对应的,得具体看看top命令的实现了。
下面的状态意思都是显而易见的:
zombie: thread执行了exit系统调用,等待父进程发出一个wait系统调用。- 1145 static int sorted_state[] = {
- 1146 0, /* not used */
- 1147 3, /* sleep */
- 1148 1, /* ABANDONED (WAIT) */
- 1149 6, /* run */
- 1150 5, /* start */
- 1151 2, /* zombie */
- 1152 4 /* stop */
- 1153 };
复制代码 |
|