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
[...]