추가 읽기

추가 읽기

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 사용량
  • 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 } ' |
UN 와이스 |
덜-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 ': ' 고양이 |
UN 와이스 |
헤더 -n 10
PID: 4140
명령: -zsh
시간: 2020-06-16 08:39:05
사용자 ID: 1001

PID: 4554
명령: sh /tmp/PCDM-session.sD4542
시간: 2020-06-16 08:39:19
사용자 ID: 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
            [...]

관련 정보