当前位置:   article > 正文

获取进程id linux,linux获取进程id和进程名称

获取进程id linux,linux获取进程id和进程名称

linux获取进程id和进程名称

作为一个共享库,应该需要统计使用本库的各种应用程序的使用频率,

使用方法等信息。才能针对主要应用做出更好的改进。

www.2cto.com

那么就需要记录调用者的进程id或者进程名称,并且保存下来。

保存的动作可以采用共享内存,也可以采用文件,这个在下篇博文描述,

本文描述如何获取进程id和进程名称。

范例:

#include

#include

#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目录中有很多跟进程相关的东西,都可以用这种方法触类旁通地实现。

http://www.dengb.com/Linuxjc/551966.htmlwww.dengb.comtruehttp://www.dengb.com/Linuxjc/551966.htmlTechArticlelinux获取进程id和进程名称 作为一个共享库,应该需要统计使用本库的各种应用程序的使用频率, 使用方法等信息。才能针对主要应用做出...

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/236211
推荐阅读
相关标签
  

闽ICP备14008679号