Да, такая утилита существует . Я написал один. Когда выйдет версия 1.41 инструментария nosh, он будет доступен.
Поля выдаются вvis
(3 )закодированной форме именно таким образом, чтобы их можно было -анализировать с помощью инструментов, которые разбивают поля на пробелы. Можно, например, передать вывод в awk
и выполнить awk
обычное сопоставление полей без (, как хорошо -, как известно, в случае передачи выходных данных ванильных ps
программ черезgrep
)случайное совпадение с чем-то из другого поля. Затем его пропускают через unvis
, чтобы получить удобочитаемую для человека -форму.
Вот как я недавно искал свои собственные процессы, например:
system-control ps -A -o "pid,args,stime,tree,tty,uid" | awk -F$'\t' '{ if ($6==1001) printf "%8u %4u %s %s [%s] %s\\n",$1,$6,$3,$4,$5,$2 }' | unvis | less -S
Я изменил предыдущую команду в своей истории, добавив в поле uid
и сопоставление с полем номер 6. Такого рода вещи не работают с ванильными командами ps
, потому что args
не распознается как одно поле. Кодированиеvis
(3 )здесь гарантирует, что это так.
Он выуживает кучу всего из stat
в Linux. (Инструмент работает как с операционными системами на базе Linux -, так и с FreeBSD. )Столбцы можно выбирать с помощью -o
и -O
, если используется прокладка совместимости, как показано здесь.
Его вывод на самом деле представляет собой правильную, машинно-разборную -плоскую файловую таблицу, разделенную одной -TAB -. Действительно, это можно превратить в выбранную вами форму с помощью Миллера и тому подобного :
.% system-control ps -A -o "pid,args,stime,uid" | awk '$4==1001 || NR==1' | mlr --oxtab --ipprint --ifs '\t' --ops ': ' cat | unvis | head -n 10 PID: 4140 COMMAND: -zsh STIME: 2020-06-16 08:39:05 UID: 1001 PID: 4554 COMMAND: sh /tmp/PCDM-session.sD4542 STIME: 2020-06-16 08:39:19 UID: 1001 %
Обратите внимание на пробелы в двух полях, которые оставались закодированными при обработке до unvis
.
Инструменты для получения надежного-машинного -обрабатываемого списка процессов действительно существуют. Это просто не (не совсем )стандартная ps
команда или top
.
vis
. Руководство по функциям библиотеки NetBSD . 2017 -04 -22. unvis
. Руководство по основным командам FreeBSD .2010 -11 -27. ps
. Направляющая ноша . Программное обеспечение. list-process-table
. Направляющая ноша . Программное обеспечение. Скриптprocinfo.py
делает это, доступный в исходном коде библиотеки pythonpsutil
. Однако он обычно не поставляется вместе с самим psutil
.
Вот пример его вывода:
$ procinfo.py $(pgrep syncthing)
pid 19383
name syncthing
parent 1836 (syncthing)
exe /usr/bin/syncthing
cwd /home/nathaniel
cmdline /usr/bin/syncthing -no-browser -no-restart -logflags=0
started 2020-06-18 18:04
cpu-tspent 0:28.66
cpu-times user=19.73, system=8.93, children_user=0.0, children_system=0.0
cpu-affinity [0, 1, 2, 3]
cpu-num 1
memory rss=42.3M, vms=927.6M, shared=14.6M, text=6.2M, lib=0B, data=129.5M, dirty=0B
memory % 0.27
user nathaniel
uids real=1000, effective=1000, saved=1000
uids real=1000, effective=1000, saved=1000
terminal
status sleeping
nice 0
ionice class=3, value=0
num-threads 13
num-fds 21
I/O read_count=8.9K, write_count=1.6K, read_bytes=2.9M, write_bytes=896.0K, read_chars=2.1M, write_chars=126.2K
ctx-switches voluntary=32, involuntary=1
open-files PATH
/home/nathaniel/.config/syncthing/index-v0.14.0.db/LOCK
/home/nathaniel/.config/syncthing/index-v0.14.0.db/LOG
/home/nathaniel/.config/syncthing/index-v0.14.0.db/006717.log
/home/nathaniel/.config/syncthing/index-v0.14.0.db/MANIFEST-006718
[...]
connections PROTO LOCAL ADDR REMOTE ADDR STATUS
TCP 192.168.1.153:57054 216.59.50.190:22067 ESTABLISHED
UDP :::35882 *:* NONE
TCP 192.168.1.153:45342 198.211.120.59:443 ESTABLISHED
TCP ::ffff:192.168.1.153:22000 ::ffff:192.168.1.175:41196 ESTABLISHED
UDP 0.0.0.0:21027 *:* NONE
UDP :::21027 *:* NONE
UDP 0.0.0.0:33035 *:* NONE
TCP :::22000 *:* LISTEN
TCP 127.0.0.1:8384 *:* LISTEN
UDP :::22020 *:* NONE
threads TID USER SYSTEM
19383 0.01 0.0
19384 0.89 2.63
19385 0.0 0.0
19386 2.2 0.5
[...]
total=13
res-limits RLIMIT SOFT HARD
virtualmem infinity infinity
coredumpsize 0 infinity
cputime infinity infinity
datasize infinity infinity
filesize infinity infinity
locks infinity infinity
memlock 16777216 16777216
msgqueue 819200 819200
nice 0 0
openfiles 4096 4096
maxprocesses 63289 63289
rss infinity infinity
realtimeprio 0 0
rtimesched infinity infinity
sigspending 63289 63289
stack 8388608 infinity
environ NAME VALUE
ACK_PAGER less --RAW-CONTROL-CHARS --no-init --quit-if-one-screen
APPORT_IGNORE_OBSOLETE_PACKAGES 1
BROWSER /usr/bin/firefox
DBUS_SESSION_BUS_ADDRESS unix:path=/run/user/1000/bus
[...]
mem-maps RSS PATH
28.3M [anon]
12.9M /usr/bin/syncthing
1.6M /lib/x86_64-linux-gnu/libc-2.27.so
164.0K /lib/x86_64-linux-gnu/ld-2.27.so
[...]