最近项目需要做应用管理,需要知道运行的应用名称及其进程ID,用于监控程序的资源占用情况。
首先是获取可执行文件名,需要用到readlink()函数,但是readlink获取的是可执行文件的绝对路径,需要用到strrchr()函数进行字符串处理,去掉路径,提取出可执行文件名。
readlink()函数用法:
strrchr()函数用法:
获取可执行文件名函数代码如下:
int get_exec_name(char *name,int name_size)
{
char path[1024]={0};
int ret = readlink("/proc/self/exe",path,sizeof(path)-1);
if(ret == -1)
{
printf("---- get exec name fail!!\n");
return -1;
}
path[ret]= '\0';
char *ptr = strrchr(path,'/');
bzero(name,name_size); //清空缓存区
strncpy(name,ptr+1,name_size-1);
return 0;
}
获取进程PID则直接调用getpid()函数即可:
getpid()用法:
测试代码如下:
int main(int argc,char *argv[])
{
char path[256]={0};
get_exec_name(path,sizeof(path)); //获取可执行文件名
int pid = getpid(); //获取进程ID
printf("exec_name = %s pid=%d\n",path,pid);
while(1);
return 0;
}
测试结果: