请问进程的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,如果有源码,可以研究一下为何没有返回。