支持HW团队,就支付宝领取下面的红包吧!(2018年3月31前,就几毛,也会几块,可以和其他红包叠加使用),你领取消费,HW有奖励。红包使用无条件限制,有条件请注意是不是有病毒。

小伙伴们,给大家发红包喽!人人可领,领完就能用。祝大家领取的红包金额大大大!#吱口令#长按复制此消息,打开支付宝就能领取!er1OEj73Uj

登入 注册 | 验证
| 搜索
HelloWorld论坛 : > 计算机科学、技术、教学> 电脑应用> linux系统> [转]由进程ID 查看进程状态
 
 
 
 
类别:其他 阅读:3442 评论:0 时间:三月 18, 2012, 8:17 a.m. 关键字:

 

 

来源: http://blog.csdn.net/weihua1984/archive/2010/11/02/5981593.aspx

 


linux上进程有5种状态: 
1. 运行(正在运行或在运行队列中等待) 
2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) 
3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生) 
4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放) 
5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行) 

ps工具标识进程的5种状态码: 
D 不可中断 uninterruptible sleep (usually IO) 
R 运行 runnable (on run queue) 
S 中断 sleeping 
T 停止 traced or stopped 
Z 僵死 a defunct ("zombie") process 

网上看到可以读取进程文件查看进程状态,自己写了一个,很粗糙,欢迎拍砖!

 

  1. int checkState(unsigned aPid)  
  2. {  
  3.         char cPidBuff[100];  
  4.         memset(cPidBuff,0,sizeof(cPidBuff));  
  5.   
  6.         sprintf(cPidBuff,"/proc/%d/status",aPid);  
  7.   
  8.         ifstream fin(cPidBuff);  
  9.         string s;  
  10.         int nRet = -1;  
  11.         while(getline(fin,s))  
  12.         {  
  13.             string subStr(s,0,6);  
  14.             if(subStr == "State:")  
  15.             {  
  16.                 s.erase(0,6);  
  17.                 //while(s++)  
  18.                 unsigned int i;  
  19.                 for(i=0;i<s.length();i++)  
  20.                 {  
  21.                     if(s[i] != ' ' && s[i] != 9)  
  22.                     {  
  23.                         nRet = 1;  
  24.                         switch(s[i]){  
  25.                             case 'D':  
  26.                                 cout<<"进程不可中断"<<endl;  
  27.                                 break;  
  28.                             case 'R':  
  29.                                 cout<<"进程运行中"<<endl;  
  30.                                 break;  
  31.                             case 'S':  
  32.                                 cout<<"进程中断"<<endl;  
  33.                                 break;  
  34.                             case 'T':  
  35.                                 cout<<"进程停止"<<endl;  
  36.                                 break;  
  37.                             case 'Z':  
  38.                                 cout<<"进程僵死"<<endl;  
  39.                                 break;  
  40.                             default:  
  41.                                 cout<<"无法识别进程状态"<<endl;  
  42.                                 break;  
  43.                         }  
  44.   
  45.                         break;  
  46.                     }  
  47.                 }  
  48.                 break;  
  49.             }  
  50.         }  
  51.   
  52.         return nRet;  
  53. }  
[挂载人]初学MPEG [审核人]初学MPEG 推荐

个人签名--------------------------------------------------------------------------------

Please Login (or Sign Up) to leave a comment