본문으로 바로가기
728x90
반응형

원도우에 작업 관리자가 있다면 리눅스에는 ps명령어가 있겠죠?!

 

리눅스 환경은 다양하다 보니 ps 명령어를 사용하여 느려지는 리눅스 원인을 파악하기 용이하죠.

ps 명령어에 많은 옵션들이 있는데 옵션에 대해 자세히 알게되면 적재적소에 필요한 옵션을 사용할 수 있습니다.

 

자 그럼 한번 ps 명령어에 어떤 옵션들이 있는지 확인해볼까요~

 

아참 본문에 들어가기에 앞서 한가지 미리 알아야 될 사항이 있습니다.

 

ps 명령어 옵션은 유닉스 계열에 따라 약간씩 차이가 있는데요. System V, BSD, GNU 계열에 따라 출력이나 옵션의 형태가 약간씩 다릅니다.

일반적으로 아래와 같이 사용됩니다.

  • System V 계열은 대시(-)
  • BSD 계열은 대시를 사용하지 않음.
  • GNU에서는 대시 두개(--)

 

일단 help 명령어로 어떤 옵션들이 있는지 확인해보죠

 

walter@ubuntu:~$ ps --help all

Usage:
 ps [options]

Basic options:
 -A, -e               all processes
 -a                   all with tty, except session leaders
  a                   all with tty, including other users
 -d                   all except session leaders
 -N, --deselect       negate selection
  r                   only running processes
  T                   all processes on this terminal
  x                   processes without controlling ttys

Selection by list:
 -C <command>         command name
 -G, --Group <GID>    real group id or name
 -g, --group <group>  session or effective group name
 -p, p, --pid <PID>   process id
        --ppid <PID>  parent process id
 -q, q, --quick-pid <PID>
                      process id (quick mode)
 -s, --sid <session>  session id
 -t, t, --tty <tty>   terminal
 -u, U, --user <UID>  effective user id or name
 -U, --User <UID>     real user id or name

  The selection options take as their argument either:
    a comma-separated list e.g. '-u root,nobody' or
    a blank-separated list e.g. '-p 123 4567'

Output formats:
 -F                   extra full
 -f                   full-format, including command lines
  f, --forest         ascii art process tree
 -H                   show process hierarchy
 -j                   jobs format
  j                   BSD job control format
 -l                   long format
  l                   BSD long format
 -M, Z                add security data (for SELinux)
 -O <format>          preloaded with default columns
  O <format>          as -O, with BSD personality
 -o, o, --format <format>
                      user-defined format
  s                   signal format
  u                   user-oriented format
  v                   virtual memory format
  X                   register format
 -y                   do not show flags, show rss vs. addr (used with -l)
     --context        display security context (for SELinux)
     --headers        repeat header lines, one per page
     --no-headers     do not print header at all
     --cols, --columns, --width <num>
                      set screen width
     --rows, --lines <num>
                      set screen height

Show threads:
  H                   as if they were processes
 -L                   possibly with LWP and NLWP columns
 -m, m                after processes
 -T                   possibly with SPID column

Miscellaneous options:
 -c                   show scheduling class with -l option
  c                   show true command name
  e                   show the environment after command
  k,    --sort        specify sort order as: [+|-]key[,[+|-]key[,...]]
  L                   show format specifiers
  n                   display numeric uid and wchan
  S,    --cumulative  include some dead child process data
 -y                   do not show flags, show rss (only with -l)
 -V, V, --version     display version information and exit
 -w, w                unlimited output width

        --help <simple|list|output|threads|misc|all>
                      display help and exit

For more details see ps(1).

 

와우 엄청 옵션이 많습니다......... 일단 필요해 보이는거 부터 하나씩 차근차근 정리해보죠

옵션 설명
기본 옵션
-A 모든 프로세스를 출력합니다.
-a 세션 리더를 제외하고 데몬 프로세스처럼 터미널에 종속되지 않은 모든 프로세스를 출력합니다.
a 터미널과 관련되 프로세스를 출력합니다.
-e 커널 프로세스를 제외한 모든 프로세스를 출력합니다.
r 현재 동작 중인 프로세스를 출력합니다..
T 현재 터미널에 족속된 모든 프로세스를 출력합니다.
x 터미널 제어 없이 프로세스 현황을 출력합니다.
선택 옵션
-C [command] command name으로 검색을 한다.
-G  [GID] real group id로 검색을 한다.
-g [GID] effective group id로 검색을 한다.
-p [PID] process id로 검색을 한다.
-s [SESSION] sessioon 로 검색을 한다.
-t [TTY] 터미널로 검색을 한다.
-U [UID] real user id로 검색을 한다.
-u [UID] effective group id 로 검색을 한다.
출력 옵션
-f full format 형식으로 출력합니다.
-F full format 형식보다 좀 더 자세히 출력합니다.
SZ, RSS ,PSR이 추가되어 출력됩니다.
-l long format 형식으로 출력합니다.
F, S, PRI, NI와 같은 우선순위 관련된 내용이 출력됩니다.
l long format 형식으로 출력합니다.(BSD계열)
-o [출력포멧] 원하는 포멧을 설정하여 출력할 수 있습니다.
u 사용자 중심 포멧으로 출력됩니다.

 

자 이제 실제 예시들을 확인해 보시죠

 

ps 명령어를 입력해보면 이렇게 bash랑 ps 만 나오죠.... 대략 난감입니다.

보통 ps 명령어는 ps 명령어 단독으로 사용되지 않고 옵션과 사용되는 경우가 대부분입니다.

System V 계열에서는 ps -ef를 BSD 계열에서는 ps aux를 많이 사용합니다.

 

BSD계열 ps aux를 먼저 사용해보죠

위에서 설명했듯이 

  • a: 터미널과 관련된 모든 프로세스 출력
  • u: 사용자 중심으로 출력
  • x: 터미널 제어 없이 프로세스 현황을 출력

 

즉, 터미널 관련된 프로세스 + 터미널 제어 없이 돌아가는 프로세스를 사용자 중심 format으로 출력됩니다.

 

여기서 보통 파이프 라인을 이용하여 다른 grep을 묶어서 사용합니다.

 

리눅스에 cron 이라는 프로세스를 찾아보죠

오 잘찾아지네요.

 

그러다면 System V 계열 ps -ef를 사용하면 어떻게 출력될까요??

 

  • -e: 세션 리더를 제외하고 데몬 프로세스처럼 터미널에 종속되지 않은 모든 프로세스를 출력
  • -f: full formet 으로 출력

세션 리더를 제외하고 데몬 프로세스처럼 터미널에 종속되지 않은 모든 프로세스를 full formant 형식으로 출력하는 거겠죠?!

 

근데 찾은 프로세스의 상세내용들이 머라머라하는지 잘 이해가 안되네요...

그래서 항목들에 대해 정리를 해봤습니다.

항목 내용
USER 프로세스 소유자의 이름을 나타냅니다(BSD 계열)
UID 프로세스 소유자의 이름을 나타냅니다(System V계열)
PID 프로세스 번호를 나타냅니다.
PPID 부모 프로세스의 ID를 나타냅니다.
%CPU CPU 사용 비율을 나타냅니다.
%MEM MEMORY 사용 비율을 나타냅니다.
VSZ 가상메모리 사용량을 나타냅니다.
RSS 실제 메모리 사용량을 나타냅니다.
TTY 프로세스와 연결된 터미널을 나타냅니다.
STAT 프로세스의 상태코드를 나타냅니다.
START 프로세스의 시작 시간을 나타냅니다.
STIME 프로세스의 시작된 시간 혹은 날짜를 나타냅니다.
TIME 프로세스에 의해 사용된 CPU 사용 시간을 나타냅니다. '시:분' 형태
COMMAND 실행된 프로세스 명을 나타냅니다.
C 짧은 기간 동안의 CPU 사용률을 나타냅니다.
PRI 실행 우선순위를 나타냅니다.
NI nice 우선순위를 나타냅니다.
ADDR 프로세스 스택의 세그먼트 번호를 나타냅니다.
SZ 프로세스가 사용하는 자료와 스택의 크기를 나타냅니다.
WCHAN 프로세스가 실행하고 있는 커널 루틴을 나타냅니다.
프로세스가 기다리고 있는 커널 이벤트의 주소라고도 합니다.
F 프로세스 및 쓰레드에 관련된 항목을 나타냅니다.

 

오 이제 ps 명령어에 대한 개념들이 잡혀가는거 같은데요

 

그렇다면 이런것들도 할 수 있어보이네요.

ps -fp 1098

cron 프로세스의 PID로 프로세스 찾기

ps -fp 5849,5948,1098

여러개의 프로세스 PID로 찾기(주의사항 콤마 뒤에 띄어쓰기가 있으면 작동이 안되요....)

ps -fC cron

cron 프로세스의 cmd로 찾기

ps -fp 5849,5948,1098 --sort=-pid
ps -fp 5849,5948,1098 --sort=+pid

pid 순으로 내용 정렬하기 (-) : 내림차순, (+) : 오름차순

 

ps -C cron -o uid,pid

cron이라는 cmd를 사용하는 프로세스의 uid, pid 형태로 출력하기

 

오늘 ps에 대해 많은 내용을 알아봤습니다!!

하나하나 배우고 공유할수록 삷에 흥미를 찾아가는 거 같습니다.

다음번에는 좀 더 알찬 내용을 공유할 수 있도록 하겠습니다.

반응형