我现在是通过 kinfo_proc.kp_proc.p_comm
字段拿到的名称,可是 p_comm
长度有限制,只能显示16个字符,名称字符多的就被截断了,如 Google Chrome Helper
,我这里输出就会变为 Google Chrome He
;而通过 proc_pidpath
拿到的是可执行文件的完整路径。
请问各位有没有能拿到完整名称的方法?
完整代码如下:
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/sysctl.h>
#include <sys/types.h>
#define NAME_LEN 4
int main(int argc, char **argv)
{
struct kinfo_proc *process = NULL;
size_t proc_buf_size;
int st, proc_count;
int name[NAME_LEN] = { CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0 };
pid_t pid;
st = sysctl(name, NAME_LEN, NULL, &proc_buf_size, NULL, 0);
process = malloc(proc_buf_size);
st = sysctl(name, NAME_LEN, process, &proc_buf_size, NULL, 0);
proc_count = proc_buf_size / sizeof(struct kinfo_proc);
while (st < proc_count) {
pid = process[st].kp_proc.p_pid;
printf("pid: %d name: %s\n", pid, process[st].kp_proc.p_comm);
st++;
}
return 0;
}
误导大家了,补充下,是要获取其他进程的名称。
kp_proc
里面是拿不到完整的,只有16位sys/param.h
:sys/proc_info.h
:可以试试这个:
我只是个搬运工
http://stackoverflow.com/ques...
http://stackoverflow.com/ques...