Linux下獲得程序id和程序名字
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得到程序的檔案路勁名字,程序存在的絕對路徑名。
bool getPathNamebyPid(pid_t pid,char *name) { 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);
return bret;
}
這裡得到的是程序的絕對路徑名,傳入的引數,需要在外部為其開闢空間。用完需要釋放。
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; }