실행하면 top
이런 화면이 나오는데,
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
654 root 20 0 25.5g 147780 70084 S 3.7 0.9 72:08.69 Xorg
1687 me 20 0 9165008 1.4g 268488 S 1.3 8.9 163:06.01 qutebrowser
316 root -51 0 0 0 0 S 0.7 0.0 1:09.86 irq/51-DELL095A:00
683 me 20 0 810360 58212 41792 S 0.7 0.4 12:35.61 picom
702 me 20 0 246876 18032 14616 S 0.7 0.1 26:04.86 i3bar
827 me 20 0 665528 16316 9980 S 0.7 0.1 32:41.79 conky
2874827 me 20 0 6008688 209960 123060 S 0.7 1.3 0:10.84 QtWebEngineProc
675 me 20 0 175796 24656 15216 S 0.3 0.2 0:14.27 i3
771 me 9 -11 1022184 21952 12056 S 0.3 0.1 82:23.43 pulseaudio
하지만 프로그램은 대화형이므로 시간이 지남에 따라 화면이 변경되는 것을 볼 수 있습니다(시간이 지남에 따라 정보가 변경되므로 괜찮습니다). 게다가, top | grep whatever
결코 돌아올 수 없을 것 같습니다.
해당 상태의 스냅샷을 텍스트 처리 유틸리티로 보내려면 어떻게 해야 합니까?
의견에서는 select 를 제안 top -b -n 1
하지만 이를 다른 프로그램으로 파이프하면(또는 단순화를 위해 > some-file
) 일종의 헤더도 있는 것을 볼 수 있습니다.
top - 21:35:47 up 5 days, 7:24, 1 user, load average: 0.16, 0.41, 0.37
Tasks: 243 total, 1 running, 241 sleeping, 1 stopped, 0 zombie
%Cpu(s): 2.3 us, 3.1 sy, 0.0 ni, 93.8 id, 0.0 wa, 0.0 hi, 0.8 si, 0.0 st
MiB Mem : 15787.2 total, 1840.9 free, 5693.1 used, 8253.3 buff/cache
MiB Swap: 16384.0 total, 16375.2 free, 8.8 used. 6256.7 avail Mem
실행 중인 모든 프로세스에 대한 깔끔한 표 형식의 보고서가 있으면 좋겠지만 그게 전부입니다.
이외의 유틸리티를 사용해야 합니까 top
?
어쩌면 ps -e
내가 추구해야 할 것이 있을까요?
이 솔루션을 사용하려는 시나리오는 디버거의 PID 선택기를 사용하는 것입니다. 사용자는 프로세스 이름을 작성하고 PID 선택기는 해당 이름을 기반으로 실행 중인 프로세스 목록을 필터링한 다음 사용자가 원하는 프로세스를 선택합니다. 해당 PID는 디버거를 연결하는 데 사용됩니다.
답변1
ps -o
형식이 지정된 필드 이름을 출력하는 데 큰 성공을 거두었습니다. Linux 매뉴얼 페이지에서는 초기에 출력 지정자를 여러 번 언급했습니다 ps(1)
.
먼저 이 부분을 간단히 소개하자면 다음과 같습니다 EXAMPLES
.
사용자 정의 형식을 사용하여 각 프로세스를 보려면 다음을 수행하십시오.
ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
ps axo stat, euid, ruid, tty, tpgid, sess, pgrp, ppid, pid, pcpu, comm ps -Ao pid,tt,user,fname,tmout,f,wchan
매뉴얼 페이지의 이 섹션에는 OUTPUT FORMAT CONTROL
이 옵션에 대한 세부 정보가 포함되어 있습니다.
-o
사용자 정의 형식을 지정합니다. 형식은 개별 출력 열을 지정하는 방법을 제공하는 공백 또는 쉼표로 구분된 목록 형태의 단일 매개변수입니다. 확인된 키워드는 다음과 같습니다.표준 형식 지정자아래 섹션. 제목 이름을 바꿀 수 있습니다(ps -o pid,ruser=실제 사용자 -o comm=명령) 예상대로였습니다. 모든 열 헤더가 비어 있는 경우(ps -o pid= -o 통신=) 그러면 헤더 행이 출력되지 않습니다.
예:
최근에는 모니터링 목적으로 프로세스의 상주 세트 크기(RAM 사용량)를 가져오는 간단한 방법으로 이것을 사용했습니다.
ps -eo pid=,rss=,comm=
출력 예:
3874689 9104 sshd
3875080 8788 sshd
교체품은 다음 comm=
과 같습니다 args=
.
3874689 9104 sshd: userone [priv]
3875080 8788 sshd: usertwo [priv]
즉, args
와 더 일관성이 있을 수 있는 인수를 사용하여 명령 이름을 생성합니다 ps
.
STANDARD FORMAT SPECIFIERS
설명 에 인용된 섹션을 포함하여 이러한 옵션에 대한 매뉴얼 페이지를 자세히 읽는 것이 좋습니다 -o
. 명확성을 위해 위의 전체 설명을 재현하지 않았습니다. 또한 이를 시도해 보고 구분 기호를 포함한 출력 형식을 이해하고 있는지 확인하는 것도 좋은 생각입니다.
기타 용도:
나는 , , 및 뿐만 아니라 및 ps -o
지정자 를 함께 사용했습니다 . 프로세스의 기능을 나열하고 싶지만 스크립트/코드에서 구문 분석하기 위한 더 간단한 출력을 원할 때 유용합니다.%cpu
%mem
etime
etimes
bsdstart
lstart
ps
답변2
마지막으로 ps -e
.