ps
和等实用程序top
适合同时查看多个进程。但是,它们不方便检查单个进程的多个字段,并且不适合使用grep
。例如:
$ ps -o pid,ppid,tname,bsdstart,start_time,start,bsdtime,etime,etimes,c=LIFE%,%cpu,cputime,rss,%mem,stat,class,nice=NICE,thcount,args -p $(pgrep syncthing)
PID PPID TTY START START STARTED TIME ELAPSED ELAPSED LIFE% %CPU TIME RSS %MEM STAT CLS NICE THCNT COMMAND
20149 1836 ? 19:24 19:24 19:24:58 0:24 01:54:12 6852 0 0.3 00:00:24 38428 0.2 Ssl IDL - 13 /usr/bin/syncthing -no-browser -no-restart -logflags=0
有/proc/$PID/status
:
$ cat /proc/$(pgrep syncthing)/status | head
Name: syncthing
Umask: 0022
State: S (sleeping)
Tgid: 20149
Ngid: 0
Pid: 20149
PPid: 1836
TracerPid: 0
Uid: 1000 1000 1000 1000
Gid: 1000 1000 1000 1000
但这缺乏有用的字段,例如:
- CPU使用率
- 中央处理器时间
- 常驻内存大小/常驻集大小
- 内存百分比
- 内存不足分数
- 经过时间
- 不错的优先
- 输入/输出优先级
我想要的输出可能看起来像这样:
Name: syncthing
Process ID: 20149
Parent process ID: 1836
Full command: /usr/bin/syncthing
User: exampleuser
UID: 1000
State: Sleeping (S)
CPU priority: 19 (low)
I/O scheduling class: 2 (best-effort)
I/O priority level: 7 (low)
Start date (ISO): 2020-06-15T21:21:53-04:00
Start date (UTC): Tue Jun 16 01:21:53 UTC 2020
Process age: 01:54:12
Cumulative CPU time: 00:00:24
Cumulative user CPU time: 00:00:24
Cumulative system CPU time: 00:00:24
Out of memory score: 2
Out of memory adjustment factor: 0
Number of threads: 13
Number of child processes: 0
具有来自例如/proc/$PID/stat
和 的更多字段/proc/$PID/statm
。
这样的实用程序存在吗?
注意:这个问题不同于 详细的每进程分析 因为我不是在寻找一段时间内的性能分析或监控,而是寻找上述特定格式的特定字段的流程信息快照。
答案1
是的,这样的实用程序存在。我写了一篇。当 nosh 工具包 1.41 版本出来时,它将可用。
字段以 (3) 编码形式发出vis
,因此可以通过在空白处打破字段的工具进行机器解析。例如,我们可以将输出输入awk
并进行通常的字段匹配,而不会意外地匹配来自另一个字段的某些内容awk
(众所周知,通过 传递普通ps
程序的输出就是这种情况)。grep
然后通过它unvis
得到人类可读的形式。
以下是我最近如何寻找自己的流程,例如:
系统控制 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 } ' | 联合国维斯| 少-S
我修改了历史记录中的上一个命令,添加了字段uid
以及字段号 6 的匹配。这种情况与普通ps
命令不同,因为args
不会被识别为一个字段。这里的 (3)编码vis
确保了这一点。
stat
它从Linux 上捞出一大堆东西。 (该工具适用于基于 Linux 的操作系统和 FreeBSD。)如果使用兼容性填充程序,则可以通过-o
和选择列,如此处所示。-O
它的输出实际上是一个正确的、机器可解析的、平面文件表,以单制表符分隔。事实上,人们可以将其变成您选择的形式磨坊主诸如此类:
%系统控制 ps -A -o "pid,args,stime,uid" | awk '$4==1001 || NR==1' | mlr --oxtab --ipprint --ifs '\t' --ops ': ' cat | 联合国维斯| 头-n 10 PID:4140 命令:-zsh 时间:2020-06-16 08:39:05 用户识别号:1001 PID:4554 命令:sh /tmp/PCDM-session.sD4542 时间:2020-06-16 08:39:19 用户识别号:1001 %
请注意两个字段中的空格,它们在处理过程中一直保持编码状态,直到unvis
。
获得的工具可靠地-机器可处理的流程列表确实存在。它们只是不是(不是真正的)标准ps
命令,或者top
.
进一步阅读
vis
。NetBSD 库函数手册。 2017年4月22日。unvis
。 FreeBSD 通用命令手册。 2010年11月27日。- 乔纳森·德博因·波拉德 (2020)。
ps
。小吃指南。软件。 - 乔纳森·德博因·波拉德 (2020)。
list-process-table
。小吃指南。软件。
答案2
这procinfo.py
脚本
这样做的,可以在python的源代码中找到psutil
图书馆。然而,它通常不与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
[...]