우분투: 프로세스 관리하기

프로세스 관리하기

리눅스는 실행 중인 프로그램을 적절히 제어하여 다중작업(multi tasking)을 지원합니다.

리눅스 프로세스

프로세스는 실행중인 프로그램을 나타내는 개념

  역할
PID(Process ID) 프로세스 시작시 할당되는 유일한 프로세스 식별번호
UID(User ID) 프로세스를 소유하는 사용자 계정을 식별하는 번호, 프로세스에 대한 사용자 권한을 알수 있음
GID(Group ID) 그룹 식별 번호, 프로세스가 속해 있는 그룹을 알려줌
파일 디스크립터(file descriptor) 프로세스가 읽기/쓰기 위해서 어떤 파일을 열고 있는지 파일의 어떤 위치에 있는지르 기록


현재 실행중인 프로세스 확인

➜  ~ ps
  PID TTY          TIME CMD
 7913 pts/4    00:00:00 zsh
14642 pts/4    00:00:00 ps


-a 옵션은 다른 사용자의 프로세스 상태도 표시

-x 옵션은 화면에 보이지 않는 프로세스까지 모두 표시

-ax로 두 옵션을 함께 사용하면 현재 실행중인 모든 프로세스 표시

➜  ~ ps -au
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      1322  4.4  0.6 374456 23988 tty7     Rsl+ 13:57   8:57 /usr/lib/xorg/Xorg 
root      2108  0.0  0.0  17216   484 tty1     Ss+  13:57   0:00 /sbin/agetty --nocl
hong      7913  0.0  0.1  48560  6216 pts/4    Ss   16:40   0:00 /usr/bin/zsh


-u 옵션은 프로세스를 사용한 사용자가 누구인지 그리고 프로세스의 실행 시간을 표시

-aux 옵션을 사용하면 프로세스의 시스템 자원 사용률을 확인

➜  ~ ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0 185372  3740 ?        Ss   13:56   0:03 /sbin/init splash
root         2  0.0  0.0      0     0 ?        S    13:56   0:00 [kthreadd]
root         4  0.0  0.0      0     0 ?        I<   13:56   0:00 [kworker/0:0H]


-aux 옵션으로 확인할 수 있는 프로세스 정보의 각 필드

  • USER: 소유자 이름
  • PID: 식별번호
  • %CPU: CPU 점유율
  • %MEM: 메모리 점유율
  • VSZ/RSS: 실제 메모리 사용량
  • TTY: 프로세스가 시작되고 있는 터미널
  • STAT: 현재상태
  • START: 시작시간
  • TIME: 총 사용 시간
  • COMMAND: 프로세스를 실행한 명령 행


프로세스의 상태를 나타내는 STAT 항목에는 5가지가 있습니다.

  • R(Runable): 실행 대기 상태
  • S(Sleeping): 수면 상태
  • D(in Dark wait): 입출력을 기다리는 상태
  • T(sTopped): 멈춰 있거나 흔적이 남아 있는 상태
  • Z(zombie): 완전히 죽은 상태


-ef 옵션은 PID로 정렬되어 있는 프로세스 목록을 출력

➜  ~ ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 13:56 ?        00:00:03 /sbin/init splash
root         2     0  0 13:56 ?        00:00:00 [kthreadd]
root         4     2  0 13:56 ?        00:00:00 [kworker/0:0H]


-ef옵션으로 확인할 수 있는 프로세스 정보의 각 필드

  • PPID: 부모 프로세스의 PID
  • C: 프로세스의 CPU 점유 상태
  • TTY: 프로세스가 시작되고 있는 터미널


-ef옵션은 부모 프로세스와의 관계를 파악하는데 사용됩니다.

실시간으로 메모리 점유율, CPU 점유율을 확일할 때는 ps -aux보다 top명령어가 더 유용

top - 17:45:41 up  3:48,  2 users,  load average: 0.65, 0.46, 0.52
Tasks: 236 total,   1 running, 185 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.9 us,  1.8 sy,  0.0 ni, 95.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3952716 total,  1656336 free,  1153320 used,  1143060 buff/cache
KiB Swap:  3998716 total,  3001340 free,   997376 used.  2324416 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 1322 root      20   0  374420  24316  13260 S   5.0  0.6   9:20.43 Xorg
 1375 root      20   0 2539044   7768   1372 S   4.3  0.2  10:42.58 nosintgdmn
 3913 hong      20   0 1249168  45604  29608 S   4.3  1.2  12:17.77 compiz
 7902 hong      20   0  794924  81276  54228 S   2.7  2.1   0:05.37 /usr/bin/x-term
 1168 root      20   0  682176  29964  25504 S   1.0  0.8   0:41.46 nosmain
 5285 hong      20   0 1548312 291128 104052 S   0.7  7.4  25:24.85 chrome



프로세스 종료하기

실행중인 프로세스를 종료하는 명령어는 kill입니다. kill은 사용자가 프로세스에 일정한 신호를 보내서 프로세스를 종료합니다. 신호에는 종류가 여러가지 있는데 kill -l 명령어를 사용해 신호의 종류 파악

➜  ~ kill -l
HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL PWR SYS



프로세스를 어디서 실행?

프로세스는 포그라운드 또는 백그라운드에서 실행됩니다. 명령을 실행하여 프로세스가 종료될 때까지 기다리는 포그라운드. 기다리지 않는 백그라운드가 있습니다.