获取进程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和进程名称 作为一个共享库,应该需要统计使用本库的各种应用程序的使用频率, 使用方法等信息。才能针对主要应用做出...

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值