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