知识屋:更实用的电脑技术知识网站
所在位置:首页 > 操作系统 > linux

linux获取进程id和进程名称

发布时间:2014-09-05 15:23:22作者:知识屋


linux获取进程id和进程名称
 
作为一个共享库,应该需要统计使用本库的各种应用程序的使用频率,
使用方法等信息。才能针对主要应用做出更好的改进。
  www.zhishiwu.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目录中有很多跟进程相关的东西,都可以用这种方法触类旁通地实现。
 
(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜