说明
(1)在/proc目录下包含了一些以数字命名的子目录,这些目录就是系统当前运行进程的proc抽象。每一个目录都以相关联的活动系统进程PID为目录名,在里面包含了一些文件,用于显示进程相关信息。每创建一个进程都会在/proc下生成一个以该进程PID为名的目录
(2)在/proc下,还有一个目录/proc/self,表示当前运行进程的proc抽象,它是指当前执行进程的符号链接。打印当前运行进程命令行参数:
$cat /proc/self/cmdline
$cat/proc/self/cmdline # self目录下的cmdline文件显示的信息会忽略空格,因此是合在一起的
(3)读取进程状态:/proc保存着当前运行进程的状态信息,这些状态信息存储在内核的数据结构中,所以proc文件系统提供了一个和这些信息交互的接口。访问该目录下的/proc/self/task/PID/status文件就可以得到这些信息
下面的程序演示了输出当前执行进程的状态。该程序打开self目录下的status文件,并顺序读取该文件中的每一行,将其输出到屏幕上
源码
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#define MAX 1024
#define PID 6
#define PATH_SIZE 128
int main(void)
{
FILE *fp;
pid_t pid;
char pid_str[MAX];
char path[PATH_SIZE];
char buf[MAX];
pid = getpid();
sprintf(pid_str, "%d", pid);
strcpy(path, "/proc/self/task/");
strcat(path, pid_str);
strcat(path, "/status");
fp = fopen(path, "r");
if(fp == NULL)
{
perror("fail to pen file");
exit(1);
}
while (fgets(buf, MAX, fp) != NULL)
{
printf("%s", buf);
}
fclose(fp);
return 0;
}