Linux系统编程第12章-系统和进程信息

/proc文件系统作为Linux内核的重要组成部分,不仅提供了系统和进程信息的查询接口,还允许用户进行一定程度上的配置修改。本篇详细介绍了如何通过/proc/PID目录获取进程状态、文件描述符等信息,以及如何通过uname()系统调用获取系统标识。
摘要由CSDN通过智能技术生成

1.本章介绍通过/proc文件系统获取系统和进程的一些信息。还介绍了uname()系统调用,用于获取各种系统标识。
2./proc文件系统:
Linux系统提供了/proc虚拟文件系统,用来给用户层提供系统内核和进程的一些信息,并提供普通文件的IO访问方式。该虚拟文件系统不是存储在硬盘上,而是随程序的运行自动创建和消除的虚拟文件。
a./proc/PID目录
对于系统中的每个进程,都提供了相应的目录,命名为/proc/PID,PID就是进程的ID。例如通过命令

cat /proc/1/status

就可以获取init进程的状态信息。该信息通过该目录下status文件传递。PID目录下还有一些其他文件:
cmdline(已\0分隔的命令行参数), cwd(指向当前工作目录的符号链接), Environ(NMAE=value键值对的环境变量),exe(指向正在执行文件的符号链接), fd(包含了指向由进程打开的文件描述符的符号链接), maps(内存映射),mem(进程虚拟内存), mounts(进程的安装点),root(指向根目录的符号链接), status(各种信息,包括进程id,凭证,内存使用量,信号), task(为进程中的每个线程包含一个子目录)
b./proc/PID/fd目录
该目录包含了该进程打开的文件描述符fd的符号链接,每个符号链接的名称都与描述符的数值相匹配。例如/proc/1968/1是ID为1968的进程的指向标准输出的符号链接。
c.线程 /proc/PID/task目录:
针对进程中的每个线程,内核提供了以/proc/PID/task/TID命名的子目录,其中TID为线程的id,通过gettid()函数获得。每个该目录下包含了一套类似于/proc/PID目录内容的文件和目录,用来提供各个线程的信息,因为同一个进程的各个线程共享很多资源,所以,很多信息是相同的。
3、/proc目录下还提供了很多目录用来提供各种信息,比如
/proc, /proc/net(有关网络和socket的状态信息) , /proc/sys/fs(文件系统的相关设置), /proc/sys/kernel(各种常规的内核设置), /proc/sys/net(网络和socket的设置), /proc/sys/vm(内存管理设置), /proc/sysvipc(有关system v IPC对象的信息)
4.访问/proc文件:
在脚本中可以利用echo 和cat命令来修改和读取文件内容

#echo 10000 > /proc/sys/kernel/pid_max
#cat /proc/sys/kernel/pid_max

程序中利用常规的ID借口来访问,但是要注意,很多文件是只读的。
5.uname()系统调用:

#include <sys/utsname.h>
int uname(struct utsname *utsbuf);
struct utsname {
  char sysname[_UTSNAME_LENGTH];//Implementation name
  char nodename[_UTSNAME_LENGTH];//Node name on network
  char release[_UTSNAME_LENGTH];//Implementation version level
  char version[_UTSNAME_LENGTH];//Release version level
  char machine[_UTSNAME_LENGTH];//Hardware on which system is running
  char domainname[_UTSNAME_LENGTH];//NIS domain name of host
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值