Git   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何从/ proc的C代码中提取信息大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我一直在做这个为期5天,每天超过7个小时,我不是最好的编码器,所以我需要一些帮助,我需要知道如何从/ proc,与C代码为Linux获取信息。 所需要的信息可以用下面的例子来表示。

进程的完整命令行。

进程的状态。

父级的PID。

优先。

好的价值。

实时调度优先级。

后执行cpu号码。

这个过程在用户模式下被调度的时间量。

此进程已在内核模式下计划的时间量。

虚拟内存大小以字节为单位

程序总大小以页面为单位。

驻留集大小(RSS)以字节为单位。

驻留集大小(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,请注明来意。
标签: