텍스트 처리를 위해 내 시스템에서 실행 중인 전체 프로세스 목록(적어도 해당 명령 이름 및 PID)을 표 형식으로 얻으려면 어떻게 해야 합니까?

텍스트 처리를 위해 내 시스템에서 실행 중인 전체 프로세스 목록(적어도 해당 명령 이름 및 PID)을 표 형식으로 얻으려면 어떻게 해야 합니까?

실행하면 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%memetimeetimesbsdstartlstartps

답변2

마지막으로 ps -e.

관련 정보