1. 通過進程名字得到進程id。
pid_t getProcessPidbyName(char *name)
{
FILE *fptr;
char *buf = new char[255];
char cmd[255] = {'\0'};
pid_t pid = -1;
sprintf(cmd,"pidof %s",name);
if((fptr = popen(cmd,"r")) != NULL)
{
if(fgets(buf,255,fptr) != NULL)
{
pid = atoi(buf);
printf("pid = %d\n",pid);
}
}
pclose(fptr);
delete buf;
return pid;
}
這裏的傳入參數name是進程的名字,不是它的絕對路徑名。
2. 通過進程id得到進程的文件路勁名字,進程存在的絕對路徑名。
{
FILE *fptr;
bool bret = false;
char cmd[255] = {'\0'};
sprintf(cmd,"readlink /proc/%d/exe",pid);
if((fptr = popen(cmd,"r")) != NULL)
{
if(fgets(name,255,fptr) != NULL)
{
printf("the path name is %s.\n",name);
bret = true;
}
}
pclose(fptr);
}
這裏得到的是進程的絕對路徑名,傳入的參數,需要在外部爲其開闢空間。用完需要釋放。
3. 通過文件的絕對路徑名自然就很容易得到進程的名字。
bool getProcessNamebyPathName(const char* pathName,char* name)
{
memset(name,'\0',255);
const char* pos = strrchr(pathName,'/');
if(pos == 0)
{
strcpy(name,pathName);
}
else
{
strcpy(name,pos+1);
}
return true;
}