2013. 12. 24. 10:09

[Linux/Ubuntu process 관리] ps, top을 이용하여 프로세스(process) 관리하기

ps로 실행중인 프로세스(active process) 확인하기


현재 user의 현재 shell에서 실행되는 process 목록

~$ ps

  PID TTY          TIME CMD

 3742 pts/0    00:00:00 bash

 3795 pts/0    00:00:00 ps

~$


특정 user의 실쟁중인 process 목록

~$ ps -u greenfish

  PID TTY          TIME CMD

 1809 ?        00:00:00 gnome-keyring-d

 1828 ?        00:00:00 gnome-session

 1861 ?        00:00:00 ssh-agent

...


특정 user의 실행중인 process 목록 (CPU, MEM)

~$ ps -u greenfish u

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

1000      1809  0.0  1.4  54064  7264 ?        Sl   11:45   0:00 /usr/bin/gnome-

1000      1828  0.0  1.4  35328  7248 ?        Ssl  11:45   0:00 gnome-session -

1000      1861  0.0  0.0   3368   188 ?        Ss   11:45   0:00 /usr/bin/ssh-ag

...


특정 user의 실행중인 process 목록 (PPID)

~$ ps -fu greenfish

UID        PID  PPID  C STIME TTY          TIME CMD

1000      1809     1  0 11:45 ?        00:00:00 /usr/bin/gnome-keyring-daemon --

1000      1828  1713  0 11:45 ?        00:00:00 gnome-session --session=ubuntu

1000      1861  1828  0 11:45 ?        00:00:00 /usr/bin/ssh-agent /usr/bin/dbus

...


특정 user의 실행중인 process 목록 (SZ, PSR)

~$ ps -Fu greenfish

UID        PID  PPID  C    SZ   RSS PSR STIME TTY          TIME CMD

1000      1809     1  0 13516  7264   0 11:45 ?        00:00:00 /usr/bin/gnome-k

1000      1828  1713  0  8832  7248   0 11:45 ?        00:00:00 gnome-session --

1000      1861  1828  0   842   188   0 11:45 ?        00:00:00 /usr/bin/ssh-age

...


모든 실행중인 process 목록

~$ ps -e

  PID TTY          TIME CMD

    1 ?        00:00:01 init

    2 ?        00:00:00 kthreadd

    3 ?        00:00:00 ksoftirqd/0

...


모든 실행중인 process 목록 (길게 보기)

~$ ps -el

F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD

4 S     0     1     0  0  80   0 -   729 poll_s ?        00:00:01 init

1 S     0     2     0  0  80   0 -     0 kthrea ?        00:00:00 kthreadd

1 S     0     3     2  0  80   0 -     0 run_ks ?        00:00:00 ksoftirqd/0

...


모든 실행중인 process 목록 (full format)

~$ ps -ef

UID        PID  PPID  C STIME TTY          TIME CMD

root         1     0  0 11:45 ?        00:00:01 /sbin/init

root         2     0  0 11:45 ?        00:00:00 [kthreadd]

root         3     2  0 11:45 ?        00:00:00 [ksoftirqd/0]

...


모든 실행중인 process 목록 (추가 full format)

~$ ps -eF

UID        PID  PPID  C    SZ   RSS PSR STIME TTY          TIME CMD

root         1     0  0   729  1820   0 11:45 ?        00:00:01 /sbin/init

root         2     0  0     0     0   0 11:45 ?        00:00:00 [kthreadd]

root         3     2  0     0     0   0 11:45 ?        00:00:00 [ksoftirqd/0]

...


모든 실행중인 process 목록 (단순 BSD style)

~$ ps ax

  PID TTY      STAT   TIME COMMAND

    1 ?        Ss     0:01 /sbin/init

    2 ?        S      0:00 [kthreadd]

    3 ?        S      0:00 [ksoftirqd/0]

...


모든 실행중인 process 목록 (BSD style)

~$ ps aux

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

root         1  0.0  0.3   2916  1820 ?        Ss   11:45   0:01 /sbin/init

root         2  0.0  0.0      0     0 ?        S    11:45   0:00 [kthreadd]

root         3  0.0  0.0      0     0 ?        S    11:45   0:00 [ksoftirqd/0]

...

root      3301  0.0  0.1   3456   572 ?        S    15:57   0:00 dbus-launch --a

r

...


모든 실행중인 process 목록 (BSD style, 넓게 보기)

~$ ps auwx

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

root         1  0.0  0.3   2916  1820 ?        Ss   11:45   0:01 /sbin/init

root         2  0.0  0.0      0     0 ?        S    11:45   0:00 [kthreadd]

root         3  0.0  0.0      0     0 ?        S    11:45   0:00 [ksoftirqd/0]

...

root      3301  0.0  0.1   3456   572 ?        S    15:57   0:00 dbus-launch --autolaunch=fb138e002267545c961db47100000006 --binary-syntax --close-stderr

...


모든 실행중인 process 목록 (BSD style, 무제한 넓게 보기)

~$ ps auwwx

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

root         1  0.0  0.3   2916  1820 ?        Ss   11:45   0:01 /sbin/init

root         2  0.0  0.0      0     0 ?        S    11:45   0:00 [kthreadd]

root         3  0.0  0.0      0     0 ?        S    11:45   0:00 [ksoftirqd/0]

...


process의 hierachy를 tree 형태로 보기

~$ ps -ejH

  PID  PGID   SID TTY          TIME CMD

    2     0     0 ?        00:00:00 kthreadd

    3     0     0 ?        00:00:00   ksoftirqd/0

    6     0     0 ?        00:00:00   migration/0

...

    1     1     1 ?        00:00:01 init

  368   367   367 ?        00:00:00   upstart-udev-br

  373   373   373 ?        00:00:00   udevd

  566   373   373 ?        00:00:00     udevd

  567   373   373 ?        00:00:00     udevd

  774   773   773 ?        00:00:00   upstart-socket-

...

 1592  1592  1592 ?        00:00:00   gdm-binary

 1662  1592  1592 ?        00:00:00     gdm-simple-slav

 1667  1667  1667 tty7     00:00:26       Xorg

 1713  1592  1592 ?        00:00:00       gdm-session-wor

 1828  1828  1828 ?        00:00:00         gnome-session

 1861  1861  1861 ?        00:00:00           ssh-agent

 4495  1828  1828 ?        00:00:00   gnome-terminal

 4498  1828  1828 ?        00:00:00     gnome-pty-helpe

 4499  4499  4499 pts/0    00:00:00     bash

 4553  4553  4499 pts/0    00:00:00       ps

~$ 


process의 hierachy를 tree 형태로 보기 (BSD style)

~$ ps axjf

 PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND

    0     2     0     0 ?           -1 S        0   0:00 [kthreadd]

    2     3     0     0 ?           -1 S        0   0:00  \_ [ksoftirqd/0]

    2     6     0     0 ?           -1 S        0   0:00  \_ [migration/0]

    2     7     0     0 ?           -1 S<       0   0:00  \_ [cpuset]

...

    1  1592  1592  1592 ?           -1 Ssl      0   0:00 gdm-binary

 1592  1662  1592  1592 ?           -1 Sl       0   0:00  \_ /usr/lib/gdm/gdm-si

 1662  1667  1667  1667 tty7      1667 Ss+      0   0:27      \_ /usr/bin/X :0 -

 1662  1713  1592  1592 ?           -1 Sl       0   0:00      \_ /usr/lib/gdm/gd

 1713  1828  1828  1828 ?           -1 Ssl   1000   0:00          \_ gnome-sessi

 1828  1861  1861  1861 ?           -1 Ss    1000   0:00              \_ /usr/bi

 1828  1895  1828  1828 ?           -1 Sl    1000   0:01              \_ metacit

...

    1  4558  1828  1828 ?           -1 Sl    1000   0:00 gnome-terminal

 4558  4561  1828  1828 ?           -1 S     1000   0:00  \_ gnome-pty-helper

 4558  4562  4562  4562 pts/0     4615 Ss    1000   0:00  \_ bash

 4562  4615  4615  4562 pts/0     4615 R+    1000   0:00      \_ ps axjf

~$


process의 hierachy를 tree 형태로 보기 (forest format)

~$ ps -ef --forest

UID        PID  PPID  C STIME TTY          TIME CMD

root         2     0  0 11:45 ?        00:00:00 [kthreadd]

root         3     2  0 11:45 ?        00:00:00  \_ [ksoftirqd/0]

root         6     2  0 11:45 ?        00:00:00  \_ [migration/0]

root         7     2  0 11:45 ?        00:00:00  \_ [cpuset]

...

root      1592     1  0 11:45 ?        00:00:00 gdm-binary

root      1662  1592  0 11:45 ?        00:00:00  \_ /usr/lib/gdm/gdm-simple-slav

root      1667  1662  0 11:45 tty7     00:00:28      \_ /usr/bin/X :0 -nr -verbo

root      1713  1662  0 11:45 ?        00:00:00      \_ /usr/lib/gdm/gdm-session

1000      1828  1713  0 11:45 ?        00:00:00          \_ gnome-session --sess

1000      1861  1828  0 11:45 ?        00:00:00              \_ /usr/bin/ssh-age

1000      1895  1828  0 11:45 ?        00:00:01              \_ metacity

...

1000      4617     1  2 17:30 ?        00:00:00 gnome-terminal

1000      4620  4617  0 17:30 ?        00:00:00  \_ gnome-pty-helper

1000      4621  4617  2 17:30 pts/0    00:00:00  \_ bash

1000      4675  4621  0 17:30 pts/0    00:00:00      \_ ps -ef --forest

~$


알파벳 순서로 tree 형태로 보기

~$ pstree

init─┬─NetworkManager─┬─dhclient

     │                └─2*[{NetworkManager}]

     ├─acpid

     ├─atd

...

     ├─gdm-binary─┬─gdm-simple-slav─┬─Xorg

     │            │                 ├─gdm-session-wor─┬─gnome-session─┬─applet.+

     │            │                 │                 │               ├─bluetoo+

     │            │                 │                 │               ├─evoluti+

     │            │                 │                 │               ├─gdu-not+

...

     └─zeitgeist-daemo─┬─cat

                       ├─zeitgeist-datah

                       └─{zeitgeist-daem}

~$


-o 옵션을 사용하면 표시할 column을 선택할 수 있다. --sort는 결과를 정렬한다. 다음은 -o에 사용 가능한 내용이다.


 Option

 Column

 설명

 %cpu

 %CPU 

 00.0 형태로 CPU 점유율 표시

 %mem

 %MEM

 물리 메모리 사용 % 

 args

 COMMAND

 명령의 argument 병행 표기

 bsdstart

 START 

 HH:MM 혹은 Mon Day 형식의 시작 시각 표시 

 bsdtime

 TIME 

 Total CPU Time 

 comm

 COMMAND 

 명령만 표기 (argument 표기 안함) 

 cp

 CP 

 000 형태(tenth-of-a-percent, 0~1000)로 CPU 점유율 표기

 cputime

 TIME 

 Total CPU Time [DD-]HH:MM:SS

 egid

 EGID 

 Effective group ID (정수)

 egroup

 EGROUP 

 Effective group ID (문자열)

 etime

 ELAPSED 

 시작후 경과시간 ([DD-]HH:MM:SS) 

 euid

 EUID 

 Effective user ID (정수) 

 euser

 EUSER 

 Effective user ID (문자열)

 fgid

 FGID 

 Fle system access group ID (숫자) 

 fgroup

 FGROUP

 File system access group ID (문자열) 

 fname

 COMMAND 

 명령의 첫 8글자 

 fuid

 FUID 

 File system access user ID (숫자) 

 fuser

 FUSER 

 File system access user ID (문자열) 

 lstart

 STARTED 

 명령이 시작된 시각 

 nice

 NI 

 Nice 값

 pgid

 PGID 

 Process group ID 

 pid 

 PID 

 Process ID 

 ppid 

 PPID 

 Parent process ID 

 psr

 PSR 

 Align된 Processor process (0~)

 rgid

 RGID

 Real group ID 

 rgroup

 RGROUP 

 Real group 

 rss

 RSS 

 Non-swapped physical memory (KB) 

 rtprio

 RTPRIO 

 Real-time priority 

 ruid

 RUID 

 Real user ID (정수) 

 ruser

 RUSER 

 Real user (문자열) 

 s

 S 

 상태 (D:sleep, no interrupt, R:running, S:sleep, can interrupt, T:stopped, W:paging, X:dead, Z:zombie) 

 sess

 SESS 

 Session ID 

 sgi_p

 P 

 프로세스가 실행중인 processor

 size

 SZ 

 대략적인 필요한 swap 공간 

 start

 STARTED

 명령이 시작된 시각.  HH:MM:SS 혹은 Month Day

 start_time

 START 

 명령이 시작된 시각. HH:MM 혹은 Month Day 

 stat

 STAT 

 "S"에 더해진 상태 (<:high priority, N:Low priority, L:page lock된 상태, s:session leader, l:multi-threaded, +:forground process) 

 sz

 SZ 

 프로세스의 core image 크기 (물리 크기) 

 tname

 TTY 

 제어중인 tty (terminal)

 user

 USER

 Effective user ID (문자열) 

 vsize

 VSZ 

 Process의 가상 메모리 (1024-byte 단위) 


메모리 사용량으로 정렬하려면 다음과 같다.

~$ ps -eo ppid,user,%mem,size,vsize,comm --sort=-size

 PPID USER     %MEM  SIZE    VSZ COMMAND

 1828 1000      5.6 48904 128216 nautilus

    1 1000      1.4 45156  54064 gnome-keyring-d

 1828 1000      2.9 43932 109744 gnome-panel

...

 1915 1000      0.0     0      0 zeitgeist-datah <defunct>

    2 root      0.0     0      0 kworker/0:0

    2 root      0.0     0      0 kworker/0:2

    2 root      0.0     0      0 kworker/0:1

~$


CPU 사용량으로 정렬하려면 다음과 같다.

~$ ps -eo ppid,user,bsdstart,bsdtime,%cpu,args --sort=-%cpu

 PPID USER      START   TIME %CPU COMMAND

    1 1000      09:38   0:00  0.8 gnome-terminal

 3859 1000      09:38   0:00  0.6 bash

 1662 root      05:05   0:28  0.1 /usr/bin/X :0 -nr -verbose -auth /var/run/gdm/

...

  952 root      09:18   0:00  0.0 /sbin/dhclient -d -4 -sf /usr/lib/NetworkManag

 3859 1000      09:38   0:00  0.0 gnome-pty-helper

 3863 1000      09:39   0:00  0.0 ps -eo ppid,user,bsdstart,bsdtime,%cpu,args --

~$


low priority로 정렬

~$ ps -eo ppid,user,nice,cputime,args --sort=-nice

 PPID USER      NI     TIME COMMAND

    2 root       5 00:00:00 [ksmd]

    1 rtkit      1 00:00:00 /usr/lib/rtkit/rtkit-daemon

    0 root       0 00:00:01 /sbin/init

...

    2 root     -20 00:00:00 [ext4-dio-unwrit]

    2 root     -20 00:00:00 [kpsmoused]

    2 root     -20 00:00:00 [vmmemctl]

~$


user 별로 정렬

~$ ps -eo ppid,user,stat,tname,sess,cputime,args --sort=user

 PPID USER     STAT TTY       SESS     TIME COMMAND

    1 daemon   Ss   ?         1063 00:00:00 atd

    1 1000     Sl   ?         1592 00:00:00 /usr/bin/gnome-keyring-daemon --daem

 1713 1000     Ssl  ?         1828 00:00:00 gnome-session --session=ubuntu

...

    2 root     S    ?            0 00:00:00 [kworker/0:1]

    1 rtkit    SNl  ?          880 00:00:00 /usr/lib/rtkit/rtkit-daemon

    1 syslog   Sl   ?          868 00:00:00 rsyslogd -c4

~$


rsyslogd process 표시

~$ ps -C rsyslogd

  PID TTY          TIME CMD

  879 ?        00:00:00 rsyslogd

~$


PID 879 표시

~$ ps -p 879 -o pid,ppid,bsdtime,args

  PID  PPID   TIME COMMAND

  879     1   0:00 rsyslogd -c4

~$


2명의 user process 표시

~$ ps -u root,greenfish -o pid,ruser,tty,stat,args

  PID RUSER    TT       STAT COMMAND

    1 root     ?        Ss   /sbin/init

    2 root     ?        S    [kthreadd]

    3 root     ?        S    [ksoftirqd/0]

...

 4113 1000     ?        S    gnome-pty-helper

 4114 1000     pts/0    Ss   bash

 4168 1000     pts/0    R+   ps -u root,greenfish -o pid,ruser,tty,stat,args

~$


top으로 활성화된 process 보기


다음과 같이 top을 실행하면,

~$ top


아래와 같이 프로세스가 display된다. (3초마다 refresh 된다)

~$ top


top - 09:47:20 up  4:41,  2 users,  load average: 0.00, 0.01, 0.05

Tasks: 131 total,   1 running, 129 sleeping,   0 stopped,   1 zombie

Cpu(s):  3.7%us,  0.3%sy,  0.0%ni, 95.7%id,  0.3%wa,  0.0%hi,  0.0%si,  0.0%st

Mem:    508000k total,   490844k used,    17156k free,   103252k buffers

Swap:   522236k total,      288k used,   521948k free,   182960k cached


  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            

 4171 greenfis  20   0 91268  13m  10m S  4.0  2.8   0:00.39 gnome-terminal     

 1667 root      20   0  166m  27m 7008 S  2.0  5.6   0:31.81 Xorg               

 4229 greenfis  20   0  2632 1140  860 R  0.7  0.2   0:00.05 top                

 1926 greenfis  20   0 95592  21m  17m S  0.3  4.3   0:15.85 vmtoolsd           

    1 root      20   0  2916 1756 1272 S  0.0  0.3   0:01.24 init               

    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd           

    3 root      20   0     0    0    0 S  0.0  0.0   0:00.10 ksoftirqd/0        

    6 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0        

    7 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 cpuset             

    8 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 khelper            

    9 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 netns              

   10 root      20   0     0    0    0 S  0.0  0.0   0:00.03 sync_supers        

   11 root      20   0     0    0    0 S  0.0  0.0   0:00.00 bdi-default        

   12 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 kintegrityd        

   13 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 kblockd            

   14 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 kacpid             

   15 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 kacpi_notify       



주기를 5초로 변경하려면 아래와 같이 실행한다.

~$ top -d 5


greenfish user로 실행되는 프로세스를 확인한다.

~$ top -u greenfish


두개의 process만 확인한다.

~$ top -p 4113,4114


10번 refresh하고 종료한다.

~$ top -n 10


interactive 화면을 실행하지 않는다. 지속적인 화면이 스크롤된다.

~$ top -b

top - 09:53:04 up  4:47,  2 users,  load average: 0.00, 0.01, 0.05

Tasks: 131 total,   1 running, 129 sleeping,   0 stopped,   1 zombie

Cpu(s):  0.3%us,  0.2%sy,  0.0%ni, 99.3%id,  0.2%wa,  0.0%hi,  0.0%si,  0.0%st

Mem:    508000k total,   491224k used,    16776k free,   103476k buffers

Swap:   522236k total,      288k used,   521948k free,   183048k cached


  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            

    1 root      20   0  2916 1756 1272 S  0.0  0.3   0:01.24 init               

    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd           

    3 root      20   0     0    0    0 S  0.0  0.0   0:00.11 ksoftirqd/0        

    6 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0        

...

 4242 greenfis  20   0  6936 3608 1528 S  0.0  0.7   0:00.11 bash               

 4298 greenfis  20   0  2628 1120  852 R  0.0  0.2   0:00.00 top                



top - 09:53:14 up  4:47,  2 users,  load average: 0.00, 0.01, 0.05

Tasks: 131 total,   3 running, 127 sleeping,   0 stopped,   1 zombie

Cpu(s):  2.7%us,  0.3%sy,  0.0%ni, 97.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Mem:    508000k total,   491224k used,    16776k free,   103484k buffers

Swap:   522236k total,      288k used,   521948k free,   183024k cached


  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            

 1667 root      20   0  166m  27m 7008 S  2.8  5.6   0:34.30 Xorg               

 4238 greenfis  20   0 91164  13m  10m R  2.1  2.8   0:01.15 gnome-terminal     

...


앞선 -b 옵션은 파일로 저장하기 용이하다. 다음은 10시간 간격의 프로세스 목록을 기록한다.

~$ top -b -n 1200 > process.log


만일 top 실행시, 즉각적인 refresh를 원한다면, space나 enter 키를 사용한다. shift+n은 PID로 정렬하며, shift+p는 CPU 사용량으로 정렬한다. shift+m은 memory 사용량으로 정렬한다. shift+t는 cpu time 소비시간으로 정렬한다. < 혹은 > 키로 정렬할 column을 변경한다. f 키를 눌러 정렬할 내용을 직접 선택할 수 있다.

d 키를 눌러 refresh time을 변경한다. u 키를 눌러 user를 변경한다. n을 눌러 확인할 프로세스의 개수를 지정한다. n 을 눌려 변경된 상태는 = 키를 눌러 원래대로 돌아온다.

k를 눌러 kill할 프로세스를 지정한다. r 키를 눌러 priority를 조절한다.(양수/음수)