读取进程统计信息

Read proc stat information

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

名称、ppid、状态、#ofOpenFiles、#ofThreads

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

15 (watchdog/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);
           }

我觉得这个方法不是很好。如何做到这一点?

您描述的解决方案看起来不错(尤其是使用@kaylum 的 * 格式说明符的想法)。注意可以多次使用同一个变量来忽略参数:

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

您还可以查看 strtok to read each line "token" by token. You can use it to create a function returning an array of char* like in this other question 并获取 i-th 元素(使用所有正确的 NULL 和大小检查)。

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