in source/code/scxsystemlib/process/processinstance.cpp [1663:1722]
bool ProcessInstance::GetExecutionState(unsigned short& state) const
{
/* This enum will convert to an integer that is consistent with the CIM model */
enum { Unknown, Other, Ready, Running, Blocked, Suspended_Blocked, Suspended_Ready,
Terminated, Stopped, Growing, Relinquished, NotResponding } st;
#if defined(linux)
switch (m.state) {
case 'R': st = Running; break;
case 'S': st = Suspended_Ready; break;
case 'D': st = Suspended_Blocked; break;
case 'Z': st = Terminated; break;
case 'T': st = Stopped; break;
case 'W': st = Growing; break;
case 'X': st = Terminated; break;
default: st = Unknown; break;
}
state = st;
return true;
#elif defined(sun)
switch (m_psinfo.pr_lwp.pr_sname) {
case 'O': st = Running; break;
case 'S': st = Suspended_Ready; break;
case 'R': st = Ready; break;
case 'Z': st = Terminated; break;
case 'T': st = Stopped; break;
default: st = Unknown; break;
}
state = st;
return true;
#elif defined(hpux)
switch (m_pstatus.pst_stat) {
case PS_SLEEP: st = Suspended_Ready; break;
case PS_RUN: st = Running; break;
case PS_STOP: st = Stopped; break;
case PS_ZOMBIE: st = Terminated; break;
case PS_IDLE: st = Ready; break;
case PS_OTHER: st = Other; break;
default: st = Unknown; break;
}
state = st;
return true;
#elif defined(aix)
switch (m_psinfo.pr_lwp.pr_sname) {
case 'O': st = Other; break;
case 'A': st = Ready; break;
case 'R': st = Running; break;
case 'S': st = Suspended_Ready; break;
case 'I': st = Suspended_Ready; break;
case 'W': st = Suspended_Blocked; break;
case 'Z': st = Terminated; break;
case 'T': st = Stopped; break;
default: st = IsZombie(m_psinfo) ? Terminated : Unknown; break;
}
state = st;
return true;
#else
return false;
#endif
}