歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux下C++獲取進程號

Linux下C++獲取進程號

日期:2017/3/1 10:06:24   编辑:Linux編程

如何在Linux下通過C++程序獲取ps -ef | grep “****” 的執行結果,並分解其中的進程號,廢話少說,直接上代碼:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <string>
#include <map>
#include <cstdlib>
#include <iostream>

using namespace std;

map<string,string> pmap;

int prep_map(map<string,string> &pmap){

FILE *pstr;
char cmd[128],buff[512],*p;
int iPID;
const char *name= "mongod";//要查找的進程名

int pidPosition=1;
int pInfoPosition=7;

memset(cmd,0,sizeof(cmd));

sprintf(cmd, "ps -ef | grep mongod | grep -v \"grep\" | grep fork | awk '{printf $2;printf \"|\";for(i=8;i<=NF;i++)printf\"%s \",$i;printf\"\\n\"}'",name);
pstr=popen(cmd, "r");

if(pstr==NULL)
{
return 1;
}

memset(buff,0,sizeof(buff));

while( 1 )
{
fgets(buff,512,pstr);
if(feof(pstr))
{
break;
}
printf("buffer=%s",buff);
p = strtok(buff, " ");
int iPos=0;
string strPInfo;
while(NULL != p)
{
if(pidPosition == iPos)
{
iPID = atoi(p);
printf("pid=%d \n", iPID);
}
if(iPos >= pInfoPosition)
{
strPInfo += p;
strPInfo += " ";
}
iPos++;
p=strtok(NULL, " ");

string iPID_str = iPID+"";

pmap.insert(map<string,string>::value_type(iPID_str,strPInfo.c_str()));

}
printf("pInfo = %s \n", strPInfo.c_str());
}
pclose(pstr);
return 1;
}

int main()
{
prep_map(pmap);

map<string,string>::iterator it;

for(it = pmap.begin();it != pmap.end();it++)
{
cout << "---pid is : " << it->first << endl;
cout << "---cmd is : " << it->second << endl;
}
}

Copyright © Linux教程網 All Rights Reserved