본문 바로가기
dev/unix-like

[linux] 리눅스 ps 명령어 사용 예제

by 최연탄 2016. 3. 22.
728x90
반응형

연관된 주제: 프로세스 죽이기

리눅스 ps 명령어 사용 예제


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


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


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

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


$ ps ax
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:04 /sbin/init
    2 ?        S      0:00 [kthreadd]
25011 pts/14   Ss     0:00 -bash
25107 pts/14   R+     0:00 ps ax

$ ps -e
  PID TTY          TIME CMD
    1 ?        00:00:04 init
    2 ?        00:00:00 kthreadd
25011 pts/14   00:00:00 bash
25149 pts/14   00:00:00 ps


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

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


$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.3  33776  3724 ?        Ss   Mar19   0:04 /sbin/init
root         2  0.0  0.0      0     0 ?        S    Mar19   0:00 [kthreadd]
user     25011  0.0  0.5  26852  5244 pts/14   Ss   18:57   0:00 -bash
user     25164  0.0  0.2  22648  2488 pts/14   R+   19:19   0:00 ps aux

$ ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Mar19 ?        00:00:04 /sbin/init
root         2     0  0 Mar19 ?        00:00:00 [kthreadd]
user     25011 25010  0 18:57 pts/14   00:00:00 -bash
user     25112 25011  0 19:11 pts/14   00:00:00 ps -ef


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

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


$ ps -fu user
$ ps -f -u user
UID        PID  PPID  C STIME TTY          TIME CMD
user     25011 25010  0 18:57 pts/14   00:00:00 -bash
user     25280 25011  0 19:44 pts/14   00:00:00 ps -f -u user


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


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

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


$ ps -f -p 1,25011
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Mar19 ?        00:00:04 /sbin/init
user     25011 25010  0 18:57 pts/14   00:00:00 -bash


프로세스 이름으로 보려면 '-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' 명령을 사용하는게 좋습니다.


ykshin@ubuntu:~$ 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  1.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 root      0.0  0.3 init
    2 root      0.0  0.0 kthreadd
25011 ykshin    0.0  0.5 bash
25497 ykshin    0.0  0.2 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


반응형

댓글