获得Gnu/Linux系统与进程信息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获得Gnu/Linux系统与进程信息相关的知识,希望对你有一定的参考价值。

这里主要介绍/proc伪文件系统及uname()函数来获取系统或进程的一些信息。


/proc文件系统介绍

在早期的UNIX发行版中,并不能很容易的分析内核的一些属性,并且很难回答以下问题:

  1. 系统有多少进程正在运行,并且谁拥有这些进程?

  2. 一个进程都打开了哪些文件?

  3. 哪些文件目前被锁住了,并且哪些进程拥有这些文件锁?

  4. 系统有哪些套接字正在使用?


一些早期的UNIX发行版解决该问题是允许有权限的程序进入内核的内存空间的数据结构中。这样的解决办法有诸多不便。然而,最蛋疼的是它需要程序员了解的内核中的数据结构,并且这些数据结构在不同的内核版本中会略有不同,需要程序员根据实际所依赖的内核进行代码的重写。


为了提供便捷的访问内核信息,很多现代的UNIX发行版提供了/proc虚拟文件系统。该文件系统驻留在/proc目录下,该目录下有很多文件以暴露内核信息,方便进程来从中读取信息,并在某种情形下还可以使用系统的I/O调用来修改这些信息。说/proc文件系统是虚的,主要是因为它下面的文件及子目录并不占用硬盘空间。相反是内核在进程访问这些信息的时候创建的。


获取某个进程的一些信息

对于每一个系统中进程来说,内核提供了一个在/proc中相应的目录,该目录一般是进程的PID。在/proc/PID目录中有一些文件及子目录等,这些文件及目录都包含了该进程的相关信息。在Gun/Linux系统中,我们最熟悉的1号进程就是init进程,与其相关的进程信息在/proc/1目录下。


在/proc/1目录下,有一个名为status的文件,status文件包含了关于该进程的一些详尽信息,接下来我们可以看看里面是什么东东,

[[email protected] ~]# cat /proc/1/status 
Name:	init
State:	S (sleeping)
Tgid:	1
Pid:	1
PPid:	0
TracerPid:	0
Uid:	0	0	0	0
Gid:	0	0	0	0
Utrace:	0
FDSize:	64
Groups:	
VmPeak:	   19296 kB
VmSize:	   19232 kB
VmLck:	       0 kB
VmHWM:	    1588 kB
VmRSS:	    1588 kB
VmData:	     200 kB
VmStk:	      88 kB
VmExe:	     140 kB
VmLib:	    2348 kB
VmPTE:	      56 kB
VmSwap:	       0 kB
Threads:	1
SigQ:	0/3878
SigPnd:	0000000000000000
ShdPnd:	0000000000000000
SigBlk:	0000000000000000
SigIgn:	0000000000001000
SigCgt:	00000001a0016623
CapInh:	0000000000000000
CapPrm:	ffffffffffffffff
CapEff:	fffffffffffffeff
CapBnd:	ffffffffffffffff
Cpus_allowed:	3
Cpus_allowed_list:	0-1
Mems_allowed:	00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list:	0
voluntary_ctxt_switches:	577
nonvoluntary_ctxt_switches:	69


下面列出/proc/PID目录下的一些其他文件,如下:

文件说明
cmdline以‘\0‘结尾的命令行参数
cwd指向当前工作目录的软连接
environ环境变量列表,形如:NAME=value形式
exe执行进程可执行文件的软连接
fd
该目录包含进程已打开的文件描述符,软链接至打开的文件
maps内存映射
mem进程的虚拟内存
mounts进程使用的挂载点
root软链接至根目录
status进程的一些信息(如:进程ID、内存使用情况、信号等)
task该目录下是进程的线程目录,每个线程一个子目录


/proc/PID/fd目录介绍






未完待续。。。。,回去做饭咯。



本文出自 “固态U盘” 博客,请务必保留此出处http://lavenliu.blog.51cto.com/5060944/1783110

以上是关于获得Gnu/Linux系统与进程信息的主要内容,如果未能解决你的问题,请参考以下文章

linux系统/proc/stat信息与top的cup信息的联系及区别

linux内核源码分析之proc文件系统

Android 逆向Android 系统文件分析 ( /proc/ 目录文件分析 | 记录系统和进程信息 | version 内核版本信息文件 )

Android 逆向Android 系统文件分析 ( /proc/ 目录文件分析 | 记录系统和进程信息 | version 内核版本信息文件 )

proc - 进程信息伪文件系统

Linux系统如何查看版本信息