#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>
#define TMP_BUF_SIZE 1024
/**
* 根據pid獲得進程名(不支持帶空格冒號的名字)
* 參數:
* pid [IN]: 進程pid
* proc_name [OUT]: 進程名
* 返回值:
*/
void
get_name_by_pid(pid_t pid, char *proc_name)
{
char buf[TMP_BUF_SIZE];
snprintf(buf, TMP_BUF_SIZE, "/proc/%d/cmdline", pid);
FILE* fp = fopen(buf, "r");
if(fp == NULL){
return;
}
memset(buf, 0, TMP_BUF_SIZE);
(void)fread(buf, 1, TMP_BUF_SIZE - 1, fp);
fclose(fp);
/* 去空格等干擾字符 */
size_t tmp_len = strlen(buf);
int i = 0;
for (; i <= tmp_len; ++i){
if (buf[i] == ' ' || buf[i] == ':'){
buf[i] = '\0';
break;
}
}
tmp_len = strlen(buf);
i = tmp_len;
/* 提取進程名 */
for (; i >= 0; --i){
if (buf[i] == '/'){
break;
}
}
strncpy(proc_name, &buf[i + 1], TMP_BUF_SIZE - 1);
proc_name[TMP_BUF_SIZE - 1] = '\0';
}
int main()
{
char proc_name[1024];
get_name_by_pid(getpid(), proc_name);
printf("%s\n", proc_name);
}
get_name_by_pid
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.