读取进程统计信息
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()
检测正确的格式。
您好,我需要以下有关具有某些 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()
检测正确的格式。