더북(TheBook)

-ax-aux가 시스템의 자원 사용률을 확인하는 옵션인데 비해 -ef 옵션은 PID(Process ID)로 정렬되어 있는 프로세스 목록을 출력합니다.

shinjaehun@losttemple:~$ ps -ef
UID        PID  PPID  C STIME TTY      TIME     CMD
root         1     0  0 09:32 ?        00:00:03 /sbin/init
root         2     0  0 09:32 ?        00:00:00 [kthreadd]
root         3     2  0 09:32 ?        00:00:00 [ksoftirqd/0]
root         4     2  0 09:32 ?        00:00:00 [kworker/0:0]
root         5     2  0 09:32 ?        00:00:00 [kworker/0:0H]
...

-ef 옵션으로 확인할 수 있는 프로세스 정보의 각 필드는 다음을 의미합니다. 아래에 설명이 없는 나머지 항목은 -aux 옵션의 내용과 동일합니다.

프로세스를 이야기할 때 빠져서는 안 되는 중요한 개념 중의 하나가 부모 프로세스와 자식 프로세스입니다. 리눅스 및 유닉스에서 프로세스들은 계층적으로 구성되며 각 프로세스들은 자기 자신을 만들어준 부모 프로세스를 갖습니다. 부모 프로세스에 의해 만들어진 프로세스는 자식 프로세스라고 합니다. 자식 프로세스는 부모 프로세스로부터 대부분의 속성을 상속받습니다. 따라서 리눅스의 프로세스는 자신의 프로세스 ID인 PID와 더불어 부모 프로세스의 ID인 PPID를 갖습니다.

-ef 옵션은 부모 프로세스와의 관계를 파악하는 데 사용됩니다. 예를 들어 grep 명령으로 프로세스 목록에서 ‘Network’ 문자열을 검색했습니다. PID 725인 NetworkManager, PID 1176인 dnsmasq, PID 4505인 dhclient 프로세스를 확인할 수 있습니다. 이때 dnsmasq와 dhclient의 PPID가 725라는 사실로 미루어 NetworkManager의 자식 프로세스라는 사실을 알 수 있습니다.

shinjaehun@losttemple:~$ ps -ef | grep 'Network'
root       725     1  0 09:33 ?        00:00:01 NetworkManager
nobody    1176   725  0 09:33 ?        00:00:01 /usr/sbin/dnsmasq --no-resolv --keep-in
-foreground --no-hosts --bind-interfaces --pid-file=/run/sendsigs.omit.d/network-manager.
dnsmasq.pid --listen-address=127.0.1.1 --conf-file=/var/run/NetworkManager/dnsmasq.
conf --cache-size=0 --proxy-dnssec --enable-dbus=org.freedesktop.NetworkManager.dnsmasq 
--conf-dir=/etc/NetworkManager/dnsmasq.d
root      4505   725  0 11:02 ?        00:00:01 /sbin/dhclient -d -sf /usr/lib/
NetworkManager/nm-dhcp-client.action -pf /run/sendsigs.omit.d/network-manager.dhclient-
eth0.pid -lf /var/lib/NetworkManager/dhclient-d4037252-c06f-4e45-b608-55078246966f-
eth0.lease -cf /var/lib/NetworkManager/dhclient-eth0.conf eth0
shinjae+  5180 4706  0 11:52 pts/0 00:00:00 grep --color=auto Network
Tip

마지막 PID 5180인 프로세스는 방금 실행한 grep 검색을 위한 프로세스로 의미 없는 정보입니다.

실시간으로 메모리 점유율, CPU 사용률을 확인할 때는 ps -aux보다 top 명령이 더 유용합니다. ps가 개별 프로세스 상태를 보여주는 데 비해 top은 전체적인 프로세스 상태를 알아볼 때 사용합니다.

shinjaehun@losttemple:~$ top

약 5초마다 내용이 업데이트되어 CPU를 가장 많이 점유하는 프로세스부터 순서대로 출력합니다. 필요하다면 프로세스 목록을 다양한 순서로 정렬할 수 있습니다. N을 누르면 PID 순으로, M을 누르면 메모리 사용률 순서로, T를 누르면 사용 시간에 따라, P를 누르면 CPU 점유율순(기본값)으로 프로세스 목록을 정렬합니다. q를 누르면 top을 종료합니다.

top - 00:20:21 up 1:39, 3 users, load average: 0.14, 0.10, 0.07
Tasks: 247 total,  1 running, 245 sleeping,  0 stopped,  1 zombie
Cpu(s): 2.9%us, 0.6%sy, 0.0%ni, 96.5%id,  0.0%wa,  0.0%hi, 0.0%si,  0.0%st
Mem:   4078060k total, 2790544k used,  1287516k free, 260148k buffers
Swap: 29296636k total        0k used, 29296636k free, 825464k cached

 PID USER      PR  NI  VIRT  RES   SHR   S   %CPU  %MEM  TIME+    COMMAND
5547 shinjaeh  20  0   591m  168m  44m   S   4     4.2   0:36.05  chrome
4253 shinjaeh  20  0   387m  120m  37m   S   3     3.0   0:32.31  chrome
5440 shinjaeh  20  0   391m  130m  40m   S   2     3.3   0:47.63  chrome
4035 shinjaeh  20  0   624m  109m  58m   S   2     2.7   1:20.41  chrome
1732 root      20  0   369m  183m  138m  S   1     4.6   0:39.36  Xorg
3430 shinjaeh  20  0   321m  112m  52m   S   1     2.8   0:54.41  compiz
4073 shinjaeh  20  0   544m  173m  98m   S   1     4.3   0:30.29  chrome
2619 puppet    20  0  39060  25m   2024  S   0     0.6   0:22.70  puppet
3410 shinjaeh  20  0   147m  16m   12m   S   0     0.4   0:02.07  gnome-settings-
3467 shinjaeh  20  0   302m  77m   33m   S   0     2.0   0:11.20  cairo-dock
6150 shinjaeh  20  0   257m  39m   11m   S   0     1.0   0:01.65  chrome
   1 root      20  0   3796  2196  1296  S   0     0.1   0:00.80  init
   2 root      20  0      0     0     0  S   0     0.0   0:00.00  kthreadd
   3 root      20  0      0     0     0  S   0     0.0   0:00.61  ksoftirqd/0
   5 root       0  -20    0     0     0  S   0     0.0   0:00.00  kworker/0:0H
   7 root       0  -20    0     0     0  S   0     0.0   0:00.00  kworker/u:0H
   8 root      RT  0      0     0     0  S   0     0.0   0:00.04  migration/0

윗부분은 시스템 가동 시간, 평균 부하, 전체 프로세스 정보, 메모리 상태 등 시스템 상태를 요약해서 보여줍니다. 아래는 각 프로세스 정보가 출력됩니다. 앞서 살펴보았지만 한 번 더 정리하면 PID는 프로세스 ID, USER는 프로세스 소유자, PR은 프로세스의 우선 순위, NI는 우선 순위를 지정하는 nice 값, VIRT는 프로세스가 점유하는 가상 메모리 양(KB 단위), RES는 스왑되지 않은 물리 메모리 양(KB 단위), SHR은 공유 메모리 양(KB 단위), S는 프로세스 상태, %CPU는 CPU 점유율, %MEM은 메모리 점유율, TIME+는 프로세스가 CPU를 사용한 시간, COMMAND는 프로세스를 실행한 명령을 나타냅니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.