bool ProcessInstance::GetExecutionState()

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
    }