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
网上看到可以读取进程文件查看进程状态,自己写了一个,很粗糙,欢迎拍砖!
sprintf(cPidBuff,"/proc/%d/status",aPid);
ifstream fin(cPidBuff);
string s;
int nRet = -1;
while(getline(fin,s))
{
string subStr(s,0,6);
if(subStr == "State:")
{
s.erase(0,6);
//while(s++)
unsigned int i;
for(i=0;i<s.length();i++)
{
if(s[i] != ' ' && s[i] != 9)
{
nRet = 1;
switch(s[i]){
case 'D':
cout<<"进程不可中断"<<endl;
break;
case 'R':
cout<<"进程运行中"<<endl;
break;
case 'S':
cout<<"进程中断"<<endl;
break;
case 'T':
cout<<"进程停止"<<endl;
break;
case 'Z':
cout<<"进程僵死"<<endl;
break;
default:
cout<<"无法识别进程状态"<<endl;
break;
}
break;
}
}
break;
}
}
return nRet;
}