一、过进程pid获取到进程名。
如下:
void getNameByPid(pid_t pid, char *task_name) { char proc_pid_path[BUF_SIZE]; char buf[BUF_SIZE]; sprintf(proc_pid_path, "/proc/%d/status", pid); FILE* fp = fopen(proc_pid_path, "r"); if(NULL != fp){ if( fgets(buf, BUF_SIZE-1, fp)== NULL ){ fclose(fp); } fclose(fp); sscanf(buf, "%*s %s", task_name); } }注:
ssanf()小知识点:
给定一个字符串“hello, world”,仅保留world。 (注意:“,”之后有一空格,%s遇空格停止,加*则是忽略第一个读到的字符串) sscanf(“hello,world”,"%*s%s",buf); printf("%s\n",buf); 结果为:world %*s表示第一个匹配到的%s被过滤掉,即“hello,”被过滤了
原文链接如下:http://www.jb51.net/article/45012.htm
实际测试结果如下:
执行命令./response_sync_serv realtime public test_zhj 50000
ps -elf | grep response_sync_serv
290:0 S d5000 13587 4171 99 78 0 - 24387 run_in 14:41 pts/2 00:02:05
扫描二维码关注公众号,回复:
1529275 查看本文章
查看 /proc/13587/status
cat /proc/13587/status Name: response_sync_s State: S (sleeping) SleepAVG: 78% Tgid: 13587 Pid: 13587 PPid: 4171 TracerPid: 0 Uid: 101 101 101 101 Gid: 100 100 100 100 FDSize: 64 Groups: 100 VmPeak: 97736 kB VmSize: 97548 kB VmLck: 0 kB VmHWM: 3964 kB VmRSS: 3796 kB VmData: 50320 kB VmStk: 84 kB VmExe: 4 kB VmLib: 4916 kB VmPTE: 144 kB Threads: 7 SigQ: 2/122880 SigPnd: 0000000000000000 ShdPnd: 0000000000000000 SigBlk: 0000000000000000 SigIgn: 0000000000001000 SigCgt: 0000000180000000 CapInh: 0000000000000000 CapPrm: 0000000000000000 CapEff: 0000000000000000发现进程名和可执行程序的名称并非完全相同。
那么如果我想获取可执行文件的名称呢?
二、通过进程pid获取可执行文件的名称(大牛同事支招,O(∩_∩)O哈哈~)
#include <stdio.h> #include <unistd.h> #include <string.h> #define PROC_NAME_LEN 256 int get_proc_name(char *proc_name) { char *p = NULL; int count = 0; char chPath[PROC_NAME_LEN] = {0}; char cParam[PROC_NAME_LEN] = {0}; pid_t pId = getpid(); sprintf(cParam,"/proc/%d/exe",pId); count = readlink(cParam, chPath, PROC_NAME_LEN); if (count < 0 || count >= PROC_NAME_LEN) { printf("Current System not Surport Proc\n"); return -1; } else { p = basename(chPath); if(p == NULL) { return -1; } } strcpy(proc_name, basename(chPath)); return 0; } int main() { int ret; char proc_name[PROC_NAME_LEN] = {0}; ret = get_proc_name(proc_name); if (0 != ret) { printf("Get proc name fail\n"); return -1; } printf("The running proc name is [%s]\n", proc_name); return 0; }ok啦。