linux c++ 得到 指定进程名 线程数
代码如下:
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
using namespace std;
int getProcessIdByExeName(const char* pName)
{
char buf[256] = {0};
snprintf(buf,sizeof(buf),"ps -ef | grep \"%s\" | grep -v grep | awk '{print $2}'",pName);
FILE* fp = popen(buf,"r");
if(fp == NULL)
{
printf("popen failed, buf = %s",buf);
return -1;
}
char oBuf[256] = {0};
fgets(oBuf,256,fp);
if(strlen(oBuf) == 0)
{
pclose(fp);
return -1;
}
oBuf[strlen(oBuf)-1] = '\0';
pclose(fp);
return atoi(oBuf);
}
int getThread(const std::string& strSrvName)
{
int iPid = -1;
iPid = getProcessIdByExeName(strSrvName.c_str());
if(iPid < 0)
{
printf("get pid faild [%s]",strSrvName.c_str());
return -1;
}
char szFileName[64] = {0};
FILE* fd =NULL;
char szLineBuff[512] = { 0 };
sprintf(szFileName, "/proc/%ld/status", iPid);
fd = fopen(szFileName, "r");
if(fd == NULL)
{
printf("open file %s failed",szFileName);
return -1;
}
int iThread = -1;
while (fgets(szLineBuff, sizeof(szLineBuff), fd) != NULL)
{
char szName[64] = {0};
int iValue = 0;
sscanf(szLineBuff, "%s", szName);//%s遇空格停止
// 进程使用的线程数
if (strcmp(szName, "Threads:") == 0)
{
sscanf(szLineBuff, "%s %d", szName, &iValue);
iThread = iValue;
break;
}
}
fclose(fd);
return iThread;
}
int main()
{
int ret=getThread("alarm");
printf("alarm exe's threads =%d\n",ret);
return 0;
}
还没有评论,来说两句吧...