说明

(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文件,并顺序读取该文件中的每一行,将其输出到屏幕上

源码

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <fcntl.h>
  5. #define MAX 1024
  6. #define PID 6
  7. #define PATH_SIZE 128
  8. int main(void)
  9. {
  10. FILE *fp;
  11. pid_t pid;
  12. char pid_str[MAX];
  13. char path[PATH_SIZE];
  14. char buf[MAX];
  15. pid = getpid();
  16. sprintf(pid_str, "%d", pid);
  17. strcpy(path, "/proc/self/task/");
  18. strcat(path, pid_str);
  19. strcat(path, "/status");
  20. fp = fopen(path, "r");
  21. if(fp == NULL)
  22. {
  23. perror("fail to pen file");
  24. exit(1);
  25. }
  26. while (fgets(buf, MAX, fp) != NULL)
  27. {
  28. printf("%s", buf);
  29. }
  30. fclose(fp);
  31. return 0;
  32. }

参考文献