[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를 조절한다.(양수/음수)