进一步阅读

进一步阅读

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.

进一步阅读

  • visNetBSD 库函数手册。 2017年4月22日。
  • unvisFreeBSD 通用命令手册。 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
            [...]

相关内容