大佬教程收集整理的这篇文章主要介绍了如何从/ proc的C代码中提取信息,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在做这个为期5天,每天超过7个小时,我不是最好的编码器,所以我需要一些帮助,我需要知道如何从/ proc,与C代码为Linux获取信息。 所需要的信息可以用下面的例子来表示。
进程的完整命令行。
进程的状态。
父级的PID。
优先。
好的价值。
实时调度优先级。
这个过程在用户模式下被调度的时间量。
此进程已在内核模式下计划的时间量。
虚拟内存大小以字节为单位
程序总大小以页面为单位。
驻留集大小(RSS)以字节为单位。
数据+堆栈大小以页面为单位。
页表项的大小以KB为单位。
以KB为单位的数据大小。
以KB为单位的堆栈大小。
文本段KB的大小。
是否有可能等到其他线程处理过程input消息?
内存泄漏在Linux上的multithreadingC ++应用程序
C中的堆大小限制
使用C ++在Linux中更改当前目录
在c ++中使用dll函数?
这听起来像你不知道从哪里开始。 让我试着解释/proc的信息:
如果我们cat /proc/29519/stat ,我们得到这个信息:
29519 (vim) S 5997 29519 5997 34835 29519 24576 1275 0 47 0 5 0 0 0 20 0 2 0 49083340 188043264 3718 18446744073709551615 4194304 6665820 140737488349264 140737488347024 140737280970147 0 0 12288 1837256447 18446744073709551615 0 0 17 3 0 0 21 0 0 8764120 8861948 8925184 140737488349925 140737488349929 140737488349929 140737488351211 0
这些数字代表什么? 答案是在man proc中 ,在/proc/[pid]/stat 。 由此我们看到前四件事是:
pid%d
(1)进程ID。
通讯%s
(2)可执行文件的文件名,括号内。 无论可执行文件是否被换出,这都是可见的。
状态%c
(3)字符串“RSDZTW”中的一个字符,其中R正在运行,S睡眠在可中断的等待中,D在不间断磁盘睡眠中等待,Z是僵尸,T被跟踪或停止(在一个信号上),W是分页。
ppid%d
(4)父母的PID。
有了这些知识,我们可以用fscanf(f,"%d %s %c %d",...)解析出来fscanf(f,...)
#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> void main(int argc,char **argv) { int pid; sscanf(argv[1],"%d",&pid); printf("pid = %dn",pid); char filename[1000]; sprintf(filename,"/proc/%d/stat",pid); FILE *f = fopen(filename,"r"); int unused; char comm[1000]; char state; int ppid; fscanf(f,&unused,comm,&state,&ppid); printf("comm = %sn",comm); printf("state = %cn",statE); printf("parent pid = %dn",ppid); fclose(f); }
现在,如果我编译该文件并运行./a.out 29519 ,我会得到
pid = 29519 comm = (vim) state = S parent pid = 5997
这是否给你足够的信息开始?
以上是大佬教程为你收集整理的如何从/ proc的C代码中提取信息全部内容,希望文章能够帮你解决如何从/ proc的C代码中提取信息所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。