PostIT

[Linux/Server] 리눅스 ps 명령어 사용하기 본문

Linux/Linux

[Linux/Server] 리눅스 ps 명령어 사용하기

shun10114 2017. 7. 7. 09:53

[Linux/Server] 리눅스 ps 명령어 사용하기



## 1. 개요

ps 명령어는 현재 시스템에서 돌고있는 프로세스를 보여주는 가장 기본적인 명령어입니다. 이 명령은 top나 htop같이 실시간으로 시스템 자원을 출력하는 명령과는 달리 ps 명령어를 입력한 순간의 정보(user id, cpu 사용량, memory 사용량, 사용한 명령이들 등)를 보여줍니다.


ps 명령은 옵션 입력 방법이 bsd 스타일과 unix 스타일, gnu 스타일로 나뉩니다. bsd 스타일은 'ps aux'와 같이 대쉬가 없는 스타일인 반면 unix 스타일은 'ps -ef' 처럼 옵션앞에 대쉬를 넣어 옵션임을 표시하는 스타일입니다. gnu 스타일은 대쉬를 두개 넣는 스타일로 'ps --help' 처럼 사용합니다. 동일하게 문자 u를 사용하는 옵션이라도 대쉬의 유무에 따라 의미가 달라집니다.



## 2. 내용.


### 1. 모든 프로세스 표시하기

다음 옵션은 현재 시스템에서 돌고있는 모든 프로세스의 정보를 표시합니다. 옵션으로 'ax' 또는 '-e'를 사용합니다.


$ ps ax

  PID TTY      STAT   TIME COMMAND

    1 ?        Ss     0:00 python app.py

    6 pts/0    Ss     0:00 bash

   15 pts/0    R+     0:00 ps ax


$ ps -e

  PID TTY          TIME CMD

    1 ?        00:00:00 python

    6 pts/0    00:00:00 bash

   16 pts/0    00:00:00 ps


실행되고있는 프로세스가 너무 많아서 한번에 보기 힘들 경우 less 명령어를 파이프하여 사용하면 보여지는 목록을 제어하며 프로세스를 확인할 수 있습니다. 사용 방법은 'ps ax | less'와 같습니다.

더 자세한 프로세스의 정보를 보고 싶다면 'u' 옵션이나 '-f' 옵션을 추가합니다.


$ ps aux

USER       PID  %CPU %MEM  VSZ       RSS     TTY   STAT   START   TIME   COMMAND

admin        1     0.0     1.2      102556  25028   ?        Ss       00:34   0:00   python app.py

admin        6    0.0     0.1      21960   3712    pts/0    Ss       00:39   0:00   bash

admin       17    0.0     0.1      19188    2412    pts/0    R+      00:51    0:00   ps aux


$ ps -ef

UID        PID  PPID  C   STIME   TTY      TIME CMD

admin        1     0    0   00:34   ?          00:00:00 python app.py

admin        6    0    0   00:39   pts/0   00:00:00 bash

admin       18    6    0   00:51   pts/0    00:00:00 ps -ef



### 2. 특정 사용자 이름으로 보기

사용자 이름으로 목록을 필터링하고 싶을 때에는 '-u' 옵션과 바로뒤에 사용자 이름을 입력하면 됩니다. 앞서 살펴보았던 '-e' 옵션은 entire 목록을 가져오라는 의미이고 '-f'는 full-format 입니다. 사용자 이름을 기준으로 필터링할 것이므로 '-e'는 제거하고 명령을 입력합니다.


$ ps -fu admin

$ ps -f -u admin

UID        PID  PPID  C STIME TTY          TIME CMD

admin        1     0  0 00:34 ?        00:00:00 python app.py

admin        6     0  0 00:39 pts/0    00:00:00 bash

admin       20     6  0 00:54 pts/0    00:00:00 ps -fu admin


둘 이상의 사용자 명으로 필터링하려면 콤마(',')로 구분하여 입력합니다.




### 3. 프로세스 id 또는 이름으로보기

프로세스 id로 필터링 하려면 '-p' 옵션을 사용합니다. 이 옵션 역시 여러개의 프로세스 id로 보고싶다면 콤마(',')로 구분하여 사용합니다.


$ ps -f -p 1,25011

UID        PID  PPID  C STIME TTY          TIME CMD

admin        1     0  0 00:34 ?        00:00:00 python app.py


프로세스 이름으로 보려면 '-C' 옵션을 사용해야 합니다. 여기서 한가지 주의할 사항은 프로세스의 정확한 이름을 입력해야 한다는 점입니다. 와일드 카드나 부분적인 이름은 검색되지 않습니다.


$ ps -C ssh

  PID TTY          TIME CMD

$ ps -C ssh*

  PID TTY          TIME CMD

$ ps -C sshd

  PID TTY          TIME CMD

 4755 ?        00:00:00 sshd

 4801 ?        00:00:00 sshd

 4883 ?        00:00:00 sshd

24939 ?        00:00:00 sshd

25010 ?        00:00:00 sshd


좀 더 유연하게 검색을 하고자 한다면 파이프로 'grep' 명령을 사용하는게 좋습니다.


$ ps -e | grep ssh

 4755 ?        00:00:00 sshd

 4801 ?        00:00:00 sshd

 4883 ?        00:00:00 sshd

24939 ?        00:00:00 sshd

25010 ?        00:00:00 sshd



### 4. cpu나 메모리 사용량으로 정렬하기

시스템을 관리하다보면 어떤 프로세스가 시스템 자원을 많이 사용하는지 알고 싶을 때가 있습니다. 전체목록을 출력하고 일일히 대조하여 찾아볼 수도 있지만 원하는 항목으로 정렬이 된다면 더 빠르게 자원 소모량을 알 수 있을 것 입니다.


정렬하는 방법은 gnu 스타일 옵션인 '--sort'를 사용하면 됩니다. 특징으로는 정렬에 필요한 필드를 여러개 지정할 수 있고 각각의 필드를 오름차순으로 할지 내림차순으로 할지 지정할 수 있습니다. 오름차순과 내림차순을 지정하는 심볼은 '+', '-' 입니다. 정렬에는 매우 다양한 파라미터를 사용할 수 있습니다. 자세한 사항은 man 페이지를 참고하기 바랍니다.


다음 예는 cpu 사용량을 우선으로 내림차순 정렬한 다음 메모리 사용량을 기준으로 내림차순 정렬하고 상위 5개의 프로세스만 출력하는 명령입니다.


$ ps aux --sort=-pcpu,-pmem | head -5

USER    PID     %CPU  %MEM    VSZ        RSS      TTY  STAT     START   TIME     COMMAND

root        1261     0.2     0.3         165508      3928       ?         Sl       Mar19   7:33     /usr/sbin/someprocess

lightdm   9040     0.0     1.9         839564     19988     ?         Sl       Mar19   0:06     /usr/sbin/otherprocess

root         9025    0.0     1.9         235720     19660     tty7      Ss+    Mar19   0:02     /usr/bin/process

lightdm   9086    0.0      1.6        508360     16632     ?          Sl       Mar19   0:00     /usr/lib/service

lightdm   9083    0.0    .  4           602992     14696     ?         Sl       Mar19   0:00     nm-applet




5. 출력할 칼럼의 종류 바꾸기

ps 명령은 원하는 칼럼만 보이도록 설정하는 기능도 있습니다. 옵션으로는 '-o'를 사용합니다. 다음 예는 pid, username, cpu, memory, command 만을 출력하게 합니다.


$ ps -e -o pid,uname,pcpu,pmem,comm

  PID USER     %CPU %MEM COMMAND

    1 admin     0.0  1.2 python

    6 admin     0.0  0.1 bash

   25 admin     0.0  0.1 ps



6. ps로 실시간 모니터링하기

'watch' 명령을 이용해 일정 시간마다 ps를 실행하여 실시간 감시자로 사용할 수 있습니다. 'top'과 같지는 않으며 그저 간단히 보기위함입니다.


$ watch -n 1 'ps -e -o pid,uname,pcpu,pmem,comm --sort=-pmem | head -5'


Every 1.0s: ps -e -o pid,uname,pcpu,pmem,comm --sort=-pcpu,-pmem | head -5                                        

Mon Mar 21 20:36:34 2016


  PID     USER     %CPU %MEM     COMMAND

 1261      root        0.2      0.3             vmtoolsd

25732     ykshin    0.1      0.7             vi

25694     ykshin    0.1      0.2             watch

 9040     lightdm   0.0      1.9             unity-greeter


## 4. 출처.

http://sisiblog.tistory.com/19 [콩]

Comments