进程文件

在Linux中“一切皆文件”,进程的一切运行信息(占用CPU、内存等)都可以在文件系统找到,例如看一下PID为1的进程信息。

  1. root@87096bf68cb2:/go/src# ls /proc/1/
  2. attr cmdline cwd fdinfo loginuid mounts numa_maps pagemap sessionid status wchan
  3. auxv comm environ gid_map maps mountstats oom_adj personality smaps syscall
  4. cgroup coredump_filter exe io mem net oom_score projid_map stat task
  5. clear_refs cpuset fd limits mountinfo ns oom_score_adj root statm uid_map

我们可以看一下它的运行状态,通过cat /proc/1/status即可。

  1. root@87096bf68cb2:/go/src# cat /proc/1/status
  2. Name: bash
  3. State: S (sleeping)
  4. Tgid: 1
  5. Ngid: 0
  6. Pid: 1
  7. PPid: 0
  8. TracerPid: 0
  9. Uid: 0 0 0 0
  10. Gid: 0 0 0 0
  11. FDSize: 256
  12. Groups:
  13. VmPeak: 20300 kB
  14. VmSize: 20300 kB
  15. VmLck: 0 kB
  16. VmPin: 0 kB
  17. VmHWM: 3228 kB
  18. VmRSS: 3228 kB
  19. VmData: 408 kB
  20. VmStk: 136 kB
  21. VmExe: 968 kB
  22. VmLib: 2292 kB
  23. VmPTE: 60 kB
  24. VmSwap: 0 kB
  25. Threads: 1
  26. SigQ: 0/3947
  27. SigPnd: 0000000000000000
  28. ShdPnd: 0000000000000000
  29. SigBlk: 0000000000010000
  30. SigIgn: 0000000000380004
  31. SigCgt: 000000004b817efb
  32. CapInh: 00000000a80425fb
  33. CapPrm: 00000000a80425fb
  34. CapEff: 00000000a80425fb
  35. CapBnd: 00000000a80425fb
  36. Seccomp: 0
  37. Cpus_allowed: 1
  38. Cpus_allowed_list: 0
  39. Mems_allowed: 00000000,00000001
  40. Mems_allowed_list: 0
  41. voluntary_ctxt_switches: 684
  42. nonvoluntary_ctxt_switches: 597

参考Linux手册可以看到更多信息,我们这不再深究,实际上ps命令获得的数据也是在这个文件系统获得的。

我们已经了解了这么多进程属性,是时候开始学习“传说中”的死锁问题了。