嵌入式技术
1、/proc 文件系统
/proc 是一个虚拟文件系统,包含了各种用于展示内核信息的文件,并且允许进程通过常规文件 IO 系统调用方便地读取,有时还可以修改这些信息。
之所以称 /proc 为虚拟文件系统,是因为其包含的文件和子目录不是存储于磁盘上的,而是由内核在进程访问此类信息时动态创建的。
1.1、获取进程的有关信息
每个进程,内核都会提供一个相应的目录 proc/PID,其中 PID 是进程的 ID,此目录的各种文件和子目录包含了进程的相关信息。
/proc/PID 目录下的文件节选:
/proc/PID/fd:为进程打开的每个文件描述符都包含一个符号链接,每个符号链接的名称都与描述符的数值相匹配
/proc/PID/task :提供线程目录,每个目录中包含的子目录 /proc/PID/task/TID,其中 TID 是线程 ID,即 gettid() 返回值。
1.2、/proc 目录下的系统信息
/proc :各种系统信息
/proc/net :有关网络和套接字的状态信息
/proc/sys/fs :文件系统相关设置
/proc/sys/kernel :各种常规的内核设置
/proc/sys/net :网络和套接字的设置
/proc/sys/vm :内存管理设置
/proc/sysvipc :有关 System V IPC 对象的信息
1.3、访问 /proc 文件
通常使用 shell 脚本来访问 /proc 目录下的文件:
echo 100000 > /proc/sys/kernel/pid_max cat /proc/sys/kernel/pid_max
也可以在程序中使用常规 IO 系统调用来访问 /proc 目录下的文件:
/proc 目录下的一些文件是只读的,即这些文件仅用于显示内核信息,无法对其进行修改, /proc/PID 目录下的大多数文件就属于此种类型
/proc 目录下的一些文件仅能由文件拥有者或者特权级进程读取, /proc/PID 目录下的所有文件都是如此
除了 /proc/PID 子目录的文件, /proc 目录的其他文件大多属于 root 用户,并且也只能由 root 用户来修改这些文件
1.4、访问 /proc/PID 目录中的文件
/proc/PID 目录的内容变化不定,每个目录随着相应的进程 ID 的创建而生,又随着进程的终止而消灭。
2、系统标识
uname() 系统调用返回了一系列关于主机系统的标识信息,存储于 utsbuf 结构体中:
#includeint uname(struct utsname *buf);
utsbuf :
struct utsname { char sysname[]; /* Operating system name (e.g., "Linux") */ char nodename[]; /* Name within "some implementation-defined network" */ char release[]; /* Operating system release (e.g., "2.6.28") */ char version[]; /* Operating system version */ char machine[]; /* Hardware identifier */ #ifdef _GNU_SOURCE char domainname[]; /* NIS or YP domain name */ #endif };
在 Linux 中这些字段的长度都是 65,其中包括了空字节终止符所占用的空间
sysname,release,version,machine 字段由内核自动设置
/proc/version 中也包含了这些信息
nodenmae 字段的返回值由 sethostname() 系统调用设置,gethostname() 则为反向操作,用于获取系统的主机名
domainname 字段的返回值由 setdomainname() 系统调用设置,getdomainname() 为反向操作,获取 NIS 域名
往期精彩
Linux静态库与共享库基础笔记
嵌入式Linux根文件系统构建指南
从零编写STM32H7的MDK SPI FLASH下载算法
移植 ubuntu core 16.04(ubuntu-base)到i.MX6ULL开发板
觉得本次分享的文章对您有帮助,随手点[在看]并转发分享,也是对我的支持。
原文标题:Linux系统和进程信息笔记
文章出处:【微信公众号:嵌入式应用研究院】欢迎添加关注!文章转载请注明出处。
全部0条评论
快来发表一下你的评论吧 !