获得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目录介绍

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

时间: 2025-01-02 15:21:21

获得Gnu/Linux系统与进程信息的相关文章

电源管理ACPI、及APM、GNU/Linux系统下的对应命令使用

/*********************************************************************  * Author  : Samson  * Date    : 05/19/2014  * Test platform:  *              Mint 15-3.8.13.13  *              GNU bash, version 4.2.45  * ***************************************

电源管理ACPI、及APM、GNU/Linux系统下的相应命令使用

/*********************************************************************  * Author  : Samson  * Date    : 05/19/2014  * Test platform:  *              Mint 15-3.8.13.13  *              GNU bash, version 4.2.45  * ***************************************

Linux系统中进程的创建

1.Linux中的进程 进程是程序执行的一个实例,也是系统资源调度的最小单位.如果同一个程序被多个用户同时运行,那么这个程序就有多个相对独立的进程,与此同时他们又共享相同的执行代码,在Linux系统中进程的概念类似于任务或者线程(task & threads). 进程是一个程序运行时候的一个实例实际上说的是它就是一个可以充分描述程序以达到了其可以运行状态的的一个数据和代码集合.一个进程会被产生并会复制出自己的子代,类似细胞分裂一样.从系统的角度来看进程的任务实际上就是担当承载系统资源的单位,系统

Linux系统编程@进程通信(一)

进程间通信概述 需要进程通信的原因: 数据传输 资源共享 通知事件 进程控制 Linux进程间通信(IPC)发展由来 Unix进程间通信 基于System V进程间通信(System V:UNIX系统的一个分支) POSIX进程间通信(POSIX:可移植操作系统接口,为了提高UNIX环境下应用程序的可移植性.很多其他系统也支持POSIX标准(如:DEC OpenVMS和Windows).) 现在Linux使用的进程间通信方式包括: 管道(pipe).有名管道(FIFO) 信号(signal) 消

查看Linux系统下RAID信息

查看Linux系统下RAID信息 软件RAID 详细可参见:http://molinux.blog.51cto.com/2536040/516008 查看阵列状态: [[email protected] ~]# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md0 : active raid5 sdd1[2] sdc1[1] sdb1[0] 9783296 blocks level 5, 64k chunk, algorithm

asp.net core2.0 部署centos7/linux系统 --守护进程supervisor(二)

原文:asp.net core2.0 部署centos7/linux系统 --守护进程supervisor(二) 续上一篇文章:asp.net core2.0 部署centos7/linux系统 --安装部署(一),遗留的问题而来,对程序添加守护进程,使网站可以持续化的运行起来. ? 1.介绍supervisor ?? ?Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,

Inxi:获取Linux系统和硬件信息的神器

导读 在这篇文章里,我们将看到如何使用inxi来获取这些详情信息.在论坛技术支持中,它可以作为调试工具,迅速确定用户的系统配置和硬件信息. Inxi是一个可以获取完整的系统和硬件详情信息的命令行工具,内容包括: 硬件 CPU 磁盘驱动器 Xorg 桌面环境 内核 GCC版本 进程 内存占用 和其他有用的信息 安装方法 Inxi在多数现代GNU/Linux操作系统的默认软件仓库中.所以,我们可以简单地运行下列命令安装. 在基于Debian的发行版: sudo apt-get install inx

使用 shell 脚本对 Linux 系统和进程资源进行监控

Shell 简介 Shell 语言对于接触 LINUX 的人来说都比较熟悉,它是系统的用户界面,提供了用户与内核进行交互操作的一种接口.它接收用户输入的命令并把它送入内核去执行.实际上 Shell 是一个命令解释器,它解释由用户输入的命令并且把它们送到内核.它没有一般编程语言的“编译 - 链接 - 运行”过程.不仅如此,Shell 有自己的编程语言用于对命令的编辑,它允许用户编写由 shell 命令组成的程序.Shell 编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用

使用Shell脚本对Linux系统和进程资源进行监控

ShellLinux脚本 摘要:Shell语言对于接触Linux的人来说都比较熟悉,它是系统的用户界面,提供了用户与内核进行交互操作的一种接口.本文我们以Bash做为实例总结了使用Shell对系统和进程资源进行监控的一些内容,希望对您能有帮助. Shell语言对于接触Linux的人来说都比较熟悉,它是系统的用户界面,提供了用户与内核进行交互操作的一种接口.它接收用户输入的命 令并把它送入内核去执行.实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核.它没有一般编程语言的“