Как работает команда ps?

Для назначения мне нужно реализовать собственную версию команды ps , но я не уверен, откуда она получает свою информацию. Где я могу найти всю информацию о процессе?

В Linux команда ps работает, читая файлы в файловой системе proc . Каталог /proc/ PID содержит различные файлы, которые предоставляют информацию о PID процесса. Содержимое этих файлов генерируется на ходу ядром, когда процесс их считывает.

Вы можете найти документацию о записях в /proc на странице руководства proc (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 … 

Вы можете посмотреть в папке /proc :
Каждый процесс, выполняющийся на вашем компьютере, имеет здесь вложенную папку с большим количеством файлов (наиболее полезным IMO, являющимся comm , который дает название процесса.)