日期:2014-05-16  浏览次数:20901 次

请问进程的stat是D是如何产生的
==============网上搜到的类似问题但没人解答================
请问进程的stat是D表示什么

我用top命令查看进程的情况,看到有一个进程的状态(STAT)是D,请问这是一种什么状态,我在网上查了说是“不可中断的静止”,具体不是很明白,请知道的给一个具体的解释,谢谢  
请问在什么样的条件下会出现这样的状态,谢谢  
=================================================


/*******************************************
*我在网上找到的是:
*STAT:该进程的状态:
*D:不可中断的静止(正在进行I/O动作)
*******************************************/
最近在PDA(linux+busybox)上写了个程序,登录进入主菜单后while(1)等待用户按键选择功能,但现在当过几个小时(有时是3、4个,有时是1、2)程序就没响应了,ps查看状态是D,如果再过一段时间进程就退出了,这几天一直找不到问题出在哪里,有没有兄弟碰到过这种情况指点一下,
在什么情况下有可能出现这种情况???
谢了先~~~


===============部分code===============
while(1)
{
TERM_clsnlines(3,13);
PrintTitle();

int   x   =   (40-strlen(szMenuCaption)/3*2)/2;/*   一个汉字占三个字节   */
TERM_displayxy(x,3,NORMALDISPLAY,szMenuCaption);

Disppage(menuitems,curpage,curitem,filenum);
//等待20s输入,没有输入返回-1
int   ch   =   TERM_getkey(1000);

/*char   tmp[10];
sprintf(tmp, "Key=%d ",ch);
WriteLog(tmp);*/

if(ch==KEY_LEFT   &&   curpage> 0)
curpage--;
else   if(ch==KEY_RIGHT   &&   curpage <pagenum)
curpage++;
.....................
}



------解决方案--------------------
linux的进程有五种状态,其中D是不可中断状态(TASK_UNINTERRUPTIBLE),与可中断状态相比,不会对信号做出相应,所以不能被信号杀掉。一般来说,这样的进程通常在等待某种状态而正在睡眠,比如等待I/O。如果程序运行正常,不用考虑这样的状态。要是程序不正常,就需要看看程序是否正确。你先确定在什么地方等待,比如是否TERM_getkey,如果有源码,可以研究一下为何没有返回。