歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

linux獲取進程id和進程名稱


linux獲取進程id和進程名稱   作為一個共享庫,應該需要統計使用本庫的各種應用程序的使用頻率, 使用方法等信息。才能針對主要應用做出更好的改進。   www.2cto.com   那麼就需要記錄調用者的進程id或者進程名稱,並且保存下來。 保存的動作可以采用共享內存,也可以采用文件,這個在下篇博文描述, 本文描述如何獲取進程id和進程名稱。 范例:   #include <stdio.h> #include <unistd.h>   #define CFGMNG_TASK_NAME_LEN 256   int main() {     int ret;     char ac_tmp[CFGMNG_TASK_NAME_LEN];   ret = cfgmng_get_taskname(ac_tmp, CFGMNG_TASK_NAME_LEN);   if (0 != ret) {       printf("Call cfgmng_get_taskname fail.\n");       return -1;   }   printf("The running task name is %s.\n", ac_tmp);   return 0; }     int cfgmng_get_taskname(char *ac, int len) {     int count = 0;     int nIndex = 0;     char chPath[CFGMNG_TASK_NAME_LEN] = {0};     char cParam[100] = {0};     char *cTem = chPath;     int tmp_len;       pid_t pId = getpid();     sprintf(cParam,"/proc/%d/exe",pId); /*    printf("cParam = %s.\n", cParam);*/     count = readlink(cParam, chPath, CFGMNG_TASK_NAME_LEN); /*    printf("count = %d.\n", count);*/     if (count < 0 || count >= CFGMNG_TASK_NAME_LEN)     {         printf("Current System Not Surport Proc.\n");         return -1;     }     else     {         nIndex = count - 1;           for( ; nIndex >= 0; nIndex--)         {             if( chPath[nIndex] == '/' )//篩選出進程名             {                 nIndex++;                 cTem += nIndex;                 break;              }         }     }     tmp_len = strlen(cTem);     if (0 == tmp_len) {         printf("Get task fail.\n");         return -1;     }          if (len <= tmp_len +1) {         printf("len(%d) is less than taskname(%s)'s len.\n", len, cTem);         return -1;     }          strcpy(ac, cTem);          return 0; } 從上面的實驗范例可以看出,主要使用的函數是getpid獲取本進程的id,再到/proc/pid/exe
中去找到對應的進程名稱。在/proc目錄中有很多跟進程相關的東西,都可以用這種方法觸類旁通地實現。  
Copyright © Linux教程網 All Rights Reserved