阅读proc统计信息

时间:2016-01-03 10:02:23

标签: c unix pid proc stat

您好我需要以下有关某些PID的进程的信息:

name,ppid,state,#ofOpenFiles,#ofThreads

我知道/ proc / pid / stat文件的示例如下:

  

15(看门狗/ 1)S 2 0 0 0 -1 69239104 0 0 0 0 0 69 0 0 -100 0 1 0 6 0 0 18446744073709551615 0 0 0 0 0 0 0 2147483647 0 18446744073709551615 0 0 17 1 99 1 0 0 0 0 0 0 0 0 0 0 0

我目前尝试解析此类文件:

FILE *fp;
           char buff[255];
           fp= fopen("/proc/123/stat", "r");
           if(fp == NULL){

           }else{

             fscanf(fp, "%d %s %c %d %d %d %d %d %u %lu ....", &pid, &name, &ppid......)
             fclose(fp);
           }

我找不到这个非常好的方法。怎么做?

1 个答案:

答案 0 :(得分:1)

您描述的解决方案看起来不错(特别是使用@ kaylum的*格式说明符的概念)。请注意,您可以多次使用相同的变量来忽略参数:

fscanf(fp, "%d %s %c %d %d %d %d %d %u %lu ...", &pid, &name, &ppid, &dummy, &dummy, &dummy, ...);

您还可以查看strtok以阅读每一行"令牌"通过令牌。您可以使用它来创建一个函数,返回char*中的NULL数组,并获取第i个元素(使用所有正确的strtok()和大小检查)。

编辑:如果文件名包含空格,那么您必须使用正则表达式或手动解析字符串,例如this检测正确的格式。