본문으로 바로가기

프로세스 관리

category Linux/Linux 기초 2017. 8. 24. 18:10
  • 프로세스(process)란? 실행중인 프로그램이다.

프로세스는 프로그램이 메모리에 적재되어 실제로 실행되고 있는 상태를 말한다. 프로세스는 컴퓨터 내에서 실행중인 프로그램의 인스턴스이다. 여러 명의 사용자들에 의해 공유되고 있는 응용프로그램은 일반적으로 각 사용자들의 실행단계에서 하나의 프로세스를 갖는다. 프로세스는 자프로세스라고도 불리는 서브프로세스를 시작시킬 수 있다. 자프로세스는 부프로세스의 복제로서 부프로세스의 자원을 일부 공유하는데, 부프로세스가 종료되면 더 이상 존재할 수 없다. 프로세스들은 몇 가지 IPC 방식을 통하여 정보를 교환하거나 그들의 연산을 동기화할 수 있다.


프로세스는 여러 가지 자원을 사용한다. 프로세스는 해당 명령을 수행하기 위해 운영체제에 따라 CPU를 점유할 수 있다. 명령어와 데이터를 저장하기 위해 물리적인 메모리를 사용한다. 프로세스는 운영체제의 제어를 받으면서 실행(running), 대기(waiting), 중단(stopped), 좀비(zombie) 중 한 상태에 있게 된다.


- 프로세스의 정보 ( Process Informaiton )

/proc 라는 디렉토리에 각 프로세스에 해당되는 PID 디렉토리들이 있다.

/proc 라는 디렉토리는 커널 메모리를 마운트 한 것이다.


PID : Process

ID    PPID : Parent Process ID


- 프로세스 실행

(fg) # ls

(bg) # ls &


[참고]백그라운드로 실행해야 하는 프로세스

GUI 환경의 프로그램들 ( 사용 시간이 오래 걸리는 프로그램 )

backup, data gathering ( 보통 30분에서 길게는 1주일 정도 걸리는 프로그램 )


잡 (job) 관리

잡 확인

# jobs

# fg %1    /* 백그라운드로 실행되는 프로세스를 포그라운드로 전환 %job_num */

# bg %1    /* 반대로 포그라운드 프로세스를 백그라운드로 전환 */

프로세스가 실행중에 CMD를 칠수 없기 때문에 <CTRL + Z > 키를 눌러 프로세스를 잠시 멈추고

bg 로 전환한다.

잡 종료

# kill %1


- 프로세스 확인

# ps

# ps -l    /* ps 보다 더 자세한 정보 */

# ps -a     /* 사용자 프로세스에 대한 간략한 정보 */

# ps -U <사용자명>    /* 특정 사용자가 실행시킨 프로세스 정보 */

# ps -t pts/5        /* 특정 터미널에서 실행시킨 프로세스 정보 */

# ps aux | grep xinetd

# ps -ef | grep xinetd


- 프로세스 종료

# kill PID

# kill PID PID PID


# kill -1 PID     /* SIGHUP 프로세스 재시작 */

# kill -2 PID    /* SIGINT  <CTRL+C> 인터럽트 종료 */

# kill -9 PID    /* SIGKILL  강제 종료 */

# kill -15 PID     /* SIGTERM 정상 종료 */  시그널을 붙이지 않는다면 기본값


# man 7 signal /* 이 외의 시그널 정보 확인 */

[좀비 프로세스]

종료가 되어야 하는 파일이 종료 되지 않고 남아있는 파일

강제로 종료 시켜야 한다.  < 다음에 더 자세히 다루도록 한다. >

# kill -9 PID


-프로세스 모니터링

#top CMD    ( ps 명령어와 달리 top은 실시간 모니터링이 가능하다. )


[명령어 형식]

# top

# top -u oracle

# top -p PID1, PID2...


[정렬 방법]

# top

1) h     /* h 키 입력후 원하는 정렬 방식 선택 */

2) P     : cpu 사용량이 높은 순으로 정렬

   M    : mem 사용량이 높은 순으로 정렬


#top

top - 17:46:37 up  2:25,  4 users,  load average: 0.03, 0.03, 0.00

Tasks: 136 total,   1 running, 134 sleeping,   0 stopped,   1 zombie

Cpu(s):  2.0%us,  1.7%sy,  0.0%ni, 96.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

           남은퍼센트

Mem:   1035096k total,   718752k used,   316344k free,    68376k buffers

                  남은공간

Swap:   522104k total,        0k used,   522104k free,   492140k cached


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

 4203 root      16   0 84828  16m  11m S  2.7  1.6   0:09.65 gnome-terminal              

 3624 root      15   0 35972  10m 6360 S  0.7  1.1   0:16.60 Xorg                        

 3813 root      15   0 42812  10m 8520 S  0.2  1.1   0:01.10 vmware-user                 

    1 root      18   0  2072  616  532 S  0.0  0.1   0:01.26 init                        

    2 root      RT  -5     0    0    0 S  0.0  0.0   0:00.35 migration/0                 

    3 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0                 

    4 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/0                  

    5 root      RT  -5     0    0    0 S  0.0  0.0   0:00.15 migration/1                 

    6 root      36  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/1                 

    7 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/1                  

    8 root      10  -5     0    0    0 S  0.0  0.0   0:00.03 events/0                    

    9 root      10  -5     0    0    0 S  0.0  0.0   0:00.00 events/1                    

   10 root      10  -5     0    0    0 S  0.0  0.0   0:00.01 khelper                     

   11 root      10  -5     0    0    0 S  0.0  0.0   0:00.00 kthread                     

   15 root      18  -5     0    0    0 S  0.0  0.0   0:00.03 kblockd/0                   

   16 root      10  -5     0    0    0 S  0.0  0.0   0:00.02 kblockd/1                   

   17 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kacpid                      

  183 root      11  -5     0    0    0 S  0.0  0.0   0:00.00 cqueue/0                    

  184 root      11  -5     0    0    0 S  0.0  0.0   0:00.00 cqueue/1                    

  187 root      10  -5     0    0    0 S  0.0  0.0   0:00.00 khubd                       

  189 root      10  -5     0    0    0 S  0.0  0.0   0:00.00 kseriod                     

  256 root      16   0     0    0    0 S  0.0  0.0   0:00.00 pdflush                     

  257 root      15   0     0    0    0 S  0.0  0.0   0:00.15 pdflush 

..... (중략) .....


[모니터링 툴 종류]

GUI) # gnome-system-monitor (TUI) # top

(GUI) # gnome-system-log (TUI) # tail -f /var/log/messages


-lsof CMD ( LiSt Open File )

프로세스에 의해 열려진 파일들에 대한 정보를 볼 수 있다. 특정 파일을 접근하고 있는 프로세스인지 특정 포트로 접속한 사용자를 확인 할 때 유용한 프로세스이다.


[명령어 형식]

# lsof

# lsof /tmp        /* 파일 이름 */

# lsof -c sshd    /* 데몬 이름 */    /* -c 특정 데몬이 사용하고 잇는 모든 파일의 정보 출력 */

# lsof -i            ( # netstat -antup )  /* -i 현재 사용하고 잇는 모든 소켓 상태를 확인 가능 */


-pmap CMD

프로세스가 사용하고 있는 메모리의 주소를 확인 할 수 있다. 응용프로그램이 실행될 때 얼마나 많은 라이브러리가 로드되는가를 확인 할 수 있다. 


[명령어 형식]

# pmap PID


-pstree CMD

실행중인 프로세스 상태를 트리 구조로 보여주는 명령어. 프로세스의 부모 자식관계를 형태로 보여주는 명령어


[명령어 형식]

# pstree

# pstree PID

# pstree user01


# pstree -l  /* 프로세스의 관계를 길게 출력 */

init-┬─acpid

     ├─atd

     ├─auditd─┬─audispd───{audispd}

     │          └─{auditd}

     ├─automount───4*[{automount}]

     ├─avahi-daemon───avahi-daemon

     ├─bonobo-activati───{bonobo-activati}

     ├─brcm_iscsiuio───3*[{brcm_iscsiuio}]

     ├─bt-applet

     ├─clock-applet

     ├─crond

     ├─cupsd

     ├─2*[dbus-daemon]

     ├─dbus-launch

     ├─eggcups

     ├─escd───{escd}

     ├─events/0

     ├─gam_server

     ├─gconfd-2

     ├─gdm-binary───gdm-binary─┬─Xorg

     │                         └─gnome-session───Xsession'

..... (중략) .....


-nice / renice CMD

프로세스를 실행하는데 있어서 프로세스에게 우선권을 부여 할 수 있다. 일반적으로 프로세스들은 설정된 우선권 순위대로 실행이 되는데 nice명령을 사용하게 되면 프로세스의 실행 우선권을 바꿀 수 있다. 우선권 순위는 -20에서 19까지의 범위를 가지며 nice 값이 적을수록 우선순위 값이 높아지게 된다.


nice 명령어   : 프로그램을 실행할 때 프로세스의 우선순위를 설정할 수 있는 명령어

renice 명령어 : 실행중인 프로그램의 우선순위를 조정할 수 있는 명령어


# ps -l 

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

0 S     0  4768  4744  0  75   0     -     644 wait   pts/1            00:00:00 bash


[명령어 형식]

# nice -(-20 ~ 19) CMD

# renice (-20 ~ 20) PID


EX : (백업스크립트/데이트 수집 스크립트) -> 오래 걸림 -> cpu 부하량 증가

(X) # /root/bin/backup.sh & 

(0) # nice -n 10 /root/bin/backup.sh & 

(부하량을 주는 프로그램)

   # top 

   # renice 10 PID  (PID : 부하량을 주는 프로그램's PID)


nice / renice 명령어는 우선순위를 낮추는 것에만 사용한다.


oracle / was 는 우선순위를 설정하지 않는다.




'Linux > Linux 기초' 카테고리의 다른 글

리눅스 기초 명령어_1  (0) 2017.08.27
원격 접속과 파일 전송  (0) 2017.08.24
쉘(shell)의 특성  (0) 2017.08.23
압축과 아카이브  (0) 2017.08.22
검색 관련 명령어  (0) 2017.08.22