12.01 /proc 文件系统

/proc 下的进程信息

这些信息都是以 /proc/PID 开头的,其中 PID 为进程自己的进程号。用 /proc/self 可以表示进程本身。

在内核 2.4 之后,Linux 增加了线程组概念,正式支持了 POSIX 线程模型。/proc/PID/task/TID 是进程号为 PID 的进程中线程号为 TID 的线程的信息文件夹。

由于 $$ 表示当前 shell 的进程号,而一个进程中的主线程号和进程号相同,我们可以用以下方式来访问当前 shell 主线程的文件夹:

(py310) xxx /data/apue $ ls /proc/$$/task/$$
arch_status  cgroup      cmdline  cwd      fd       io        maps       mounts  oom_adj        pagemap      root       sessionid  smaps_rollup  statm    uid_map
attr         children    comm     environ  fdinfo   limits    mem        net     oom_score      personality  sched      setgroups  stack         status   wchan
auxv         clear_refs  cpuset   exe      gid_map  loginuid  mountinfo  ns      oom_score_adj  projid_map   schedstat  smaps      stat          syscall

信息总量会比进程信息少一些,还有一些信息是和进程信息重复的。但是线程也有自己独特的信息,比如 /proc/PID/task/TID/status 中可能会有不一样的信息。

直接访问 /proc/TID/ 也是能够获取到信息的:涉及到和进程相关的信息,就访问的是所在进程的;涉及到和线程相关的信息,就相当于访问的是自己的。比如:如果 MainThread 是所在进程的主线程,Thread1 是另外一个线程,那么访问 /proc/Thread1/task/ 相当于访问 /proc/MainThread/task/。

/proc 下的系统信息

这些信息有些是只读的,有些允许读写。有些是只能其所属用户或者 root 才能读取。