原理:
- 首先使用getppid获取父进程的ID。
- 然后通过读取/proc/${pid}/cmdline获取指定进程的命令行。
- Linux似乎并没有提供直接获取cmdline的系统调用,而是在/proc/文件系统提供了这些信息。
代码示例
#include<stdio.h>
#include<stdlib.h>
#include <sys/types.h>
#include <unistd.h>
const char* get_process_name_by_pid(const int pid)
{
static char name[1024];
sprintf(name, "/proc/%d/cmdline",pid);
FILE* f = fopen(name,"r");
if(f){
size_t size;
size = fread(name, sizeof(char), 1024, f);
if(size>0){
if('\n'==name[size-1])
name[size-1]='\0';
}
fclose(f);
}
return name;
}
int main() {
int ppid = getppid();
printf("cmdline=%s\n", get_process_name_by_pid(ppid));
return 0;
}
类似的还可以通过/proc/${pid}/comm获取指定ID的comm。
- comm对于进程来说,就是启动进程的program name。
- comm对于线程来说,默认情况下是所属进程的comm,但也可以通过调用pthread_setname_np设置线程的comm。
- 举例: