ps 命令是如何工作的?

Muh*_*yas 6 linux ps

对于作业,我需要实现我自己的ps命令版本,但我不确定它从哪里获取信息。我在哪里可以找到所有过程信息?

Gil*_*il' 9

在 Linux 上,该ps命令通过读取proc 文件系统中的文件来工作。该目录包含提供有关进程PID信息的各种文件。这些文件的内容是在进程读取它们时由内核动态生成的。/proc/PID

您可以/procproc(5) 手册页内核文档中找到有关条目的文档

您可以通过观察该ps命令的作用来自己找出这一点strace,该命令列出了进程进行的系统调用。

% strace -e open ps
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libprocps.so.3", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/sys/devices/system/cpu/online", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
open("/proc/self/stat", O_RDONLY)       = 3
open("/proc/uptime", O_RDONLY)          = 3
open("/proc/sys/kernel/pid_max", O_RDONLY) = 4
open("/proc/meminfo", O_RDONLY)         = 4
open("/proc/1/stat", O_RDONLY)          = 6
open("/proc/1/status", O_RDONLY)        = 6
open("/proc/2/stat", O_RDONLY)          = 6
open("/proc/2/status", O_RDONLY)        = 6
open("/proc/3/stat", O_RDONLY)          = 6
open("/proc/3/status", O_RDONLY)        = 6
…

% strace -e open ps
…
open("/proc/1/stat", O_RDONLY)          = 6
open("/proc/1/status", O_RDONLY)        = 6
open("/proc/1/cmdline", O_RDONLY)       = 6
…
Run Code Online (Sandbox Code Playgroud)