惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Stack Overflow Blog
Stack Overflow Blog
N
News | PayPal Newsroom
阮一峰的网络日志
阮一峰的网络日志
月光博客
月光博客
T
Tailwind CSS Blog
博客园 - 叶小钗
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
B
Blog RSS Feed
Know Your Adversary
Know Your Adversary
P
Privacy International News Feed
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Project Zero
Project Zero
美团技术团队
雷峰网
雷峰网
Martin Fowler
Martin Fowler
P
Privacy & Cybersecurity Law Blog
T
The Blog of Author Tim Ferriss
S
Schneier on Security
V
V2EX
Cisco Talos Blog
Cisco Talos Blog
Blog — PlanetScale
Blog — PlanetScale
G
GRAHAM CLULEY
J
Java Code Geeks
V
Visual Studio Blog
N
Netflix TechBlog - Medium
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Cyberwarzone
Cyberwarzone
Recent Announcements
Recent Announcements
C
CXSECURITY Database RSS Feed - CXSecurity.com
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
N
News and Events Feed by Topic
Forbes - Security
Forbes - Security
GbyAI
GbyAI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Hacker News
The Hacker News
Application and Cybersecurity Blog
Application and Cybersecurity Blog
The Cloudflare Blog
腾讯CDC
爱范儿
爱范儿
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
罗磊的独立博客
T
Threatpost
大猫的无限游戏
大猫的无限游戏
NISL@THU
NISL@THU
Cloudbric
Cloudbric
C
CERT Recently Published Vulnerability Notes
C
Check Point Blog
Microsoft Azure Blog
Microsoft Azure Blog

博客园 - 山本二十八

【转】ext4+delalloc造成单次写延迟增加的分析 write 系统调用耗时长的原因 【转】通过blktrace, debugfs分析磁盘IO win7 wifi热点 【SystemTap】 Linux下安装使用SystemTap源码安装SystemTap pdflush进程介绍与优化【转】 How to find per-process I/O statistics on Linux oom_killer 磁盘性能统计 利用ftrace跟踪内核static tracepoint Tracing on Linux 【转】ftrace 简介 buffer与cache的区别 fio使用 linux分区 局部标签(gcc对c的扩展) Valgrind查找内存泄露利器 打印堆栈信息 shell调试技术
取得进程信息
山本二十八 · 2013-05-24 · via 博客园 - 山本二十八
#ifdef AIX
INT32 CProcessState::GetProcessState(const INT64 lPid, TProState* pProcessState)
{
    INT32 nRet = ZX_SYS_NO_ERROR;
    char cState = CHAR_SNONE;
    pid_t pid = lPid;
    INT32 nState = 0;
    INT64 lPageSize = 0;
    struct procsinfo pi;
    if (pProcessState == NULL)
    {
        ZX_ERROR(LOG_NORMAL,"pProcessState == NULL");
        return -1;
    }
    lPageSize = sysconf(_SC_PAGE_SIZE);
    if (lPageSize == -1)
    {
        ZX_ERROR(LOG_NORMAL,"sysconf(_SC_PAGE_SIZE)");
        return -1;
    }

    nRet = getprocs(&pi, sizeof(pi), 0, 0, &pid, 1);
    if(nRet != 1 || pi.pi_pid != lPid)
    {
        //ZX_ERROR(LOG_NORMAL,"getprocs()");
        return -1;
    }
    struct tm tmNow;
    time_t timeNow;
    time(&timeNow);
    perfstat_cpu_total_t userbuff;
    nRet = perfstat_cpu_total(NULL, &userbuff, sizeof(perfstat_cpu_total_t), 1);
    if (nRet != 1)
    {
        ZX_ERROR(LOG_NORMAL,"perfstat_cpu_total()");
        return -1;
    }

    nState = (INT32)pi.pi_state;
    switch (nState)
    {
    case SNONE:
    default:
        cState = CHAR_SNONE;
        break;
    case SIDL:
        cState = CHAR_SIDL;
        break;
    case SZOMB:
        cState = CHAR_SZOMB;
        break;
    case SSTOP:
        cState = CHAR_SSTOP;
        break;
    case SACTIVE:
        cState = CHAR_SACTIVE;
        break;
    case SSWAP:
        cState = CHAR_SSWAP;
        break;
    }
    /*打包进程信息*/
    sprintf(pProcessState->szProName,"%s",pi.pi_comm);    
    pProcessState->lPid = pi.pi_pid;
    pProcessState->dPercentCpu = (pi.pi_utime+pi.pi_stime)*100.0/(userbuff.ncpus_cfg*(timeNow-pi.pi_start));
    pProcessState->lMemUsage = pi.pi_size*lPageSize/SIZE_1K;
    pProcessState->lVMemUsage = pi.pi_size*lPageSize/SIZE_1K;
    pProcessState->nPriority = pi.pi_ppri;
    pProcessState->dPercentMem = pi.pi_prm;
    pProcessState->lRss = (pi.pi_drss+pi.pi_trss)*lPageSize/SIZE_1K;
    //CGetTime::TimeToString((time_t*)&pi.pi_start,pProcessState->szStart,"-",":");
    pProcessState->lTime = pi.pi_utime+pi.pi_stime;
    pProcessState->cStat = cState;
    return ZX_SYS_NO_ERROR;
}
#endif
#ifdef HPUX
INT32 CProcessState::GetProcessState(const INT64 lPid, TProState* pProcessState)
{
    INT32 nRet = 0;
    char cState = CHAR_SNONE;
    pid_t pid = lPid;
    INT32 nState = 0;
    INT64 lPageSize = 0;

    struct pst_static pstatic;
    struct pst_status pi;

    if (pProcessState == NULL)
    {
        ZX_ERROR(LOG_NORMAL,"pProcessState == NULL");
        return -1;
    }

    nRet = pstat_getstatic(&pstatic, sizeof(pst_static), 1, 0);
    if (nRet == -1)
    {
        ZX_ERROR(LOG_NORMAL,"pstat_getstatic()");
        return -1;
    }

    nRet = pstat_getproc(&pi,sizeof(pst_status),0,pid);
        
    if (nRet!=-1 && pi.pst_pid == lPid)
    {
        nState = (INT32)pi.pst_stat;
        switch (nState)
        {
        case PS_OTHER:
        default:
            cState = CHAR_SNONE;
            break;
        case PS_IDLE:
            cState = CHAR_SIDL;
            break;
        case PS_ZOMBIE:
            cState = CHAR_SZOMB;
            break;
        case PS_STOP:
            cState = CHAR_SSTOP;
            break;
        case PS_RUN:
            cState = CHAR_SACTIVE;
            break;
        case PS_SLEEP:
            cState = CHAR_SSWAP;
            break;
        }
        /*打包消息*/
        sprintf(pProcessState->szProName,"%s",pi.pst_ucomm);    
        pProcessState->lPid = pi.pst_pid;
        pProcessState->dPercentCpu = pi.pst_pctcpu;
        pProcessState->lMemUsage = (pi.pst_dsize+pi.pst_ssize+pi.pst_tsize)*pstatic.page_size/SIZE_1K;
        pProcessState->lVMemUsage = (pi.pst_vssize+pi.pst_vtsize+pi.pst_vdsize)*pstatic.page_size/SIZE_1K;
        pProcessState->nPriority = pi.pst_pri;
        pProcessState->dPercentMem = pi.pst_rssize/(double)pstatic.pst_maxmem;
        pProcessState->lRss = pi.pst_rssize*pstatic.page_size/SIZE_1K;
        CGetTime::TimeToString(&(pi.pst_start),pProcessState->szStart,"-",":");
        pProcessState->lTime = pi.pst_utime+pi.pst_stime;
        pProcessState->cStat = cState;
    }
    else
    {
        ZX_ERROR(LOG_NORMAL,"pstat_getproc()");
        return -1;
    }
    return ZX_SYS_NO_ERROR;
}
#endif

#ifdef LINUX
INT32 CProcessState::GetProcessState(const INT64 lPid, TProState* pProcessState)
{
    INT32 nRet = ZX_SYS_NO_ERROR;
    char szCommand[SIZE_1K] = "";
    char szTemp[SIZE_1K] = "";
    char szbuf[SIZE_1K] = "";
    char *pszTemp = NULL;
    char *pszSearch = " ";
    INT32 nPos = 0;
    FILE *fp = NULL;
    sprintf(szCommand,"ps -eo comm,pid,pcpu,pmem,size,vsize,rss,s,pri,cputime,lstart|grep %"PRId64 ,lPid);
    //TL_DEBUG("%s\n",szCommand);
    if (pProcessState == NULL)
    {
        ZX_ERROR(LOG_NORMAL,"pProcessState == NULL");
        return -1;
    }
    fp = popen(szCommand,"r");
    if (fp == NULL)
    {
        ZX_ERROR(LOG_NORMAL,szCommand);
        pszSearch = NULL;
        pszTemp = NULL;
        fp = NULL;
        return -1;
    }
    if(fgets(szbuf,sizeof(szbuf),fp))
    {
        pszTemp = strtok(szbuf,pszSearch);
        if(pszTemp != NULL)
        {
            sprintf(pProcessState->szProName,"%s",pszTemp);
        }
        for(int i = 0;i<10; i++)
        {
            if (i == 9)
            {
                pszSearch = "\n";
            }
            pszTemp = strtok(NULL,pszSearch);
            if(pszTemp != NULL)
            {
                switch (i)
                {
                case 0:
                    pProcessState->lPid = atol(pszTemp);
                    break;
                case 1:
                    pProcessState->dPercentCpu = atof(pszTemp);
                    break;
                case 2:
                    pProcessState->dPercentMem = atof(pszTemp);
                    break;
                case 3:
                    pProcessState->lMemUsage = atol(pszTemp);
                    break;
                case 4:
                    pProcessState->lVMemUsage = atol(pszTemp);
                    break;
                case 5:
                    pProcessState->lRss = atol(pszTemp);
                    break;
                case 6:
                    pProcessState->cStat = pszTemp[0];                    
                    break;
                case 7:
                    pProcessState->nPriority = atoi(pszTemp);
                    break;
                case 8:
                    pProcessState->lTime = 0;
                    break;
                case 9:
                    sprintf(pProcessState->szStart,"%s",pszTemp);
                    break;
                default:
                    break;
                }
            }
        }        
    }
    pclose(fp);
    pszSearch = NULL;
    pszTemp = NULL;
    fp = NULL;
    return ZX_SYS_NO_ERROR;
}
#endif