/proc
文件系统,也称为进程信息文件系统(Process Information file system),是一种在 Linux 和其他类 Unix 系统中存在的虚拟文件系统。它被设计用来提供一种机制,允许用户空间访问内核空间的数据结构和信息。
但是与普通文件不同的是, proc 文件系统是动态创建的,文件本身并不存在于磁盘当中、 只存在于内存当中,与 devfs 一样,都被称为虚拟文件系统。
所以这些以数字命名的文件夹中记录了这些进程相关的信息,不同的信息通过不同的虚拟文件呈现出来。
读取特定进程的命令行参数:pid
应该替换为目标进程的进程ID,如下命令显示了启动该进程的完整命令行。
cat /proc/pid/cmdline
cat /proc/self/environ
获取系统内存使用情况:/proc/meminfo 文件提供了系统的内存使用统计,包括总内存、空闲内存、缓冲区内存等。
cat /proc/meminfo
查看当前进程的文件描述符:/proc/self/fd/将列出当前进程打开的所有文件描述符,每个文件描述符都是一个指向实际文件的符号链接。
cat /proc/self/fd/
获取当前进程的CPU使用情况:如下命令将从 stat
文件中提取出CPU使用情况的部分。
cat /proc/stat | grep '^cpu '
查看当前进程的状态:/proc/self/status文件包含了当前进程的多种状态信息,如线程数、内存使用、用户和组ID等。
cat /proc/self/status
获取内核版本信息:/proc/version文件显示了Linux内核的版本信息。
cat /proc/version
在用户空间程序中使用 read()
系统调用来读取 /proc
文件系统的内容是一种常见的做法,如下程序示例使用 read()
读取内核版本信息、当前进程的文件描述符、CPU 使用情况。
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#define BUFFER_SIZE 1024
int main()
{
char buffer[BUFFER_SIZE];
ssize_t bytesRead;
int fd;
// 读取内核版本信息
fd = open("/proc/version", O_RDONLY);
if (fd == -1) {
perror("open /proc/version failed");
return 1;
}
bytesRead = read(fd, buffer, BUFFER_SIZE - 1);
if (bytesRead == -1) {
perror("read /proc/version failed");
close(fd);
return 1;
}
buffer[bytesRead] = '\0'; // 确保字符串以空字符结尾
printf("Kernel version: %s\n", buffer);
close(fd);
// 读取当前进程的文件描述符
fd = open("/proc/self/fd", O_RDONLY | O_DIRECTORY);
if (fd == -1) {
perror("open /proc/self/fd failed");
return 1;
}
// 这里我们只读取目录的第一个文件描述符作为示例
bytesRead = readlinkat(fd, "0", buffer, BUFFER_SIZE - 1);
if (bytesRead == -1) {
perror("readlinkat failed");
close(fd);
return 1;
}
buffer[bytesRead] = '\0';
printf("First file descriptor: %s\n", buffer);
close(fd);
// 读取CPU使用情况
fd = open("/proc/stat", O_RDONLY);
if (fd == -1) {
perror("open /proc/stat failed");
return 1;
}
bytesRead = read(fd, buffer, BUFFER_SIZE - 1);
if (bytesRead == -1) {
perror("read /proc/stat failed");
close(fd);
return 1;
}
buffer[bytesRead] = '\0';
// 打印整个CPU使用情况可能很长,这里只打印前几行
printf("CPU usage information:\n%.*s\n", (int)bytesRead, buffer);
close(fd);
return 0;
}
运行结果如下:
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- igbc.cn 版权所有 湘ICP备2023023988号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务