歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> linux獲取進程id和進程名稱

linux獲取進程id和進程名稱

日期:2017/3/1 17:08:31   编辑:關於Linux

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