IT/라즈베리파이2

리눅스 프로세서 관리

단디1969 2015. 6. 17. 19:11

리눅스 프로세서 관리

원문 : http://cafe.daum.net/comerang/IJAu/10?q=%B8%AE%B4%AA%BD%BA%20%BD%C7%C7%E0%C1%DF%C0%CE%20%C7%C1%B7%CE%BC%BC%BC%AD&re=1


리눅스 프로세서 관리

개념  유형

프로그램은 프로세서가  가능성을 간직한  디스크에 잠들어 있는 정보를 의미하며 프로세서는 그것이 활동하고 있는 상태를 의미한다.

 

Process 생성

하나의 프로세스가 다른 프로세스를 생성할 경우 원래의 프로세스가  이상 남아 있을 필요가 없다면 exec 호출을 통하여 자신을 다른 프로그램을 실행하는 새로운 프로세스로 대치될  있다.

원래의 프로세스가 계속 존재하려면 fork 호출을 통하여 자신의 복사본 프로세스를 먼저 만들고 복사본 프로세스에서 다시 exec 호출을 통하여 자신을 다른 프로그램을 실행하는 새로운 프로세스를 대치한다.

 

Process 상태 보기 (ps)

현재 존재하는 프로세스들의 실행 상태를 요약한 보고서를 만들어 준다.

 

ps 명령어를 파이프오 함께 사용하는 것이 유용할 때가 있다보통 다음과 같이 사용함으로써 httpd process 실행 중인지 확인할  있다.

 

          ps aux | grep http [return]

 

PS 상태에 대한 여러 가지 정보는 다음과 같다

 

          user(BSD)            : 프로세스 소유자의 username

          uid(sysV)             : 프로세스 소유자의 username

          pid                      : 프로세스 식별번호

          %CPU                : cpu 사용 비율 추정치 (BSD)

          %mem                : 메모리 사용 비율 추정치 (BSD)

          SZ                       : K 단위 혹은 페이지 단위의 가상 메모리 사용 가능

          RSS                    : 실제 메모리 사용량

          TTY                     : 프로세스와 연결된 터미널 포트

          STAT                   : 프로세스의 현재 상태

                       R           : 실행  혹은 실행될  있는 상태

                       S           : sleep

                       I             : idle (비활동 상태 : BSD / 중간적 상태 : sysV)

                       T            : 정지된 상태 (suspend)

                       Z            : 좀비 (zombie) 프로세스

                       D           : 디스크 관련 대기 상태 (BSD)

                       P           : 페이지 관련 대기 상태 (BSD)

                       X            : 메모리 확보를 위해 대기  (sys V)

                       K           : 사용 가능한 커널 프로세스 (aix)

                       W          : 스왑 out 상태

                       N           : nice 되어진 상태

                       >           : 우선 순위가 인위적으로 높아진 상태

          TIME                   :  cpu 사용 시간

          COMMAND          : 프로세스의 실행 명령 

          STIME(sysV)       : 프로세스가 시작된 시각 혹은 날짜

          C(sysV)/CP(BSD) : 짧은 기간 동안의 cpu 사용률

          F                         : 프로세스의 프래그들

          PPID                   : 부모 프로세스의 PID

          PRI                     : 실제 실행 우선 순위

          NI                        : nice

          WCHAN              : 프로세스를 기다리고 있는 이벤트

 

 

Signal 보내기 (kill)

프로세스 간의 통신 수단이 signal 이라고   있다

하나의 프로세스가 다른 프로세스에게로 메시지를 보내기 위한 수단이다.

kill 프로세스를 죽이는 명령이 아니라 signal  보내는 명령이다.

 

signal

 

 일반적으로 사용되는 signal 다음과 같다.

 

          이름       번호       의미

          HVP       1            Hangup (실행종료로그아웃 하거나 모뎀 접속을 끊을  보냄)

          INT         2            Interrupt (실행종료. ^c 쳤을  보내진다.)

          QUIT      3            Quit (실행종료. ^8 쳤을  보내진다.)

          KILL       9            Kill (무조건 종료)

          SEGV    11          Segmentation Violation (허가되지 않은 메모리 영역에 접근)

          TERM    15          Terminate (가능한  정상 종료)

             CONT     18          Continue (STOP TSTP 의해 정지된 프로세스가 다시 실행을

계속한다.)

             STOP     19          Stop (무조건적으로 그리고 즉각적으로 정지)

             TSTP     20          Stop (실행을 정지  다시 실행을 계속하기 위해 대기. ^Z)

 

 

kill 명령의 사용법

 

kill <pid>

kill -<signal> <pid>

 

 

Multitasking

Foreground, background & suspend

   기능으로 하나 이상의 작업을 console에서 사용할  있다.

          Foreground : 화면에 보여주면서 실행되는 상태 (입력을 받아들인다.)

          Background : 화면에 보여주지 않으면서 실행되는 상태 (입력을 받지 못한다)

          Suspend : 메모리에 올라가 있지만 정지된 상태

Foreground 실행하기

  일반적으로 사용하는 방법이 foreground 실행되는 것이다.

Background 실행하기

  뒤에 &  붙이면 화면 뒤에서 실행이 된다이렇게 실행하면 다른 작업을 동시에   있지만 vi 같이 입력을 받아 실행하는 프로그램은

  background 실행될  없다.

Foreground suspend 실행하기

  ^Z 누르면 실행 중이던 프로그램이 suspend된다. Suspend 것을 다시 foreground 하기 위해서는 fg %<작업번호 사용한다

 작업번호는jobs 명령어로   있다. Suspend 것을 다시 background 하기 위해서는 bg %<작업번호 사용한다.

 

 

demon

백그라운드로 실행되면서 서버의 역할을 하거나  기능을 도와주는 프로세서를 가리키는 말이다실행되는 방식에 따라 standalone 방식과 INET 방식이 있다.

                                                                                                                        

Standalone 방식

  보통 부팅 시에 실행되는 프로세스로 메모리에 계속 상주해 있으면서 client에게 서비스를 해준다서비스 요구가 빈번하거나 항상 요구되어지는 서비스일 경우 이러한 방법으로 수행한다.

 

 

INET 방식

  Client로부터 요청이 되었을  프로세스가 되어 서비스를 해준다이러한 demon들은 관리하는 demon 있는데 그것은 super demon 또는 inet demon 이락 한다 demon standalone방식으로 실행되며 INET 방식의 demon들에 대해 tcpwrapper 작동시킬  있다. Tcpwrapper INET방식의 demon 실행할  다른 처리 단계를 거칠  있게 하므로 보안상의 이점이나 다양한 조절을   있다.

 

 

inet demon

  어떠한 서비스를 INET 방식으로  것인지를 설정하고 tcpwrapper 작동시킬  있다. Inetd 설정 파일은 /etc/inetd.conf 이며, RedHat 7.x이상에서는 xinetd 교체되어, /etc/xinetd.d/ 디렉토리 안에 있는 파일들을 이용하여 설정한다.

 

 

프로세스 유틸리티

 

 pstree (프로세스 상관관계 알기)

시스템에서 돌아가고 있는 프로세스들은 서로 연관성을 갖고 실행된다프로세스들 간의 연결 구조를 트리 형식으로 출력

[서식]

  pstree [-옵션] [프로세스 ID | 사용자]

 

[주요 사용 옵션]

  -a    : 명령어에 인수를 넣어 실행했다면 명령어 인수까지 함께 보여준다

  -c    : 독립적인 하위 트리를 보여주지 않는다같은 위치에 같은 프로세스가 있을 때는 합치지 않음.

  -h    : 현재 프로세스와 부모 프로세스를   두드러지게 출력

  -l     : 특별한  줄이 있어도 그대로 보여줌

  -n    : PID 순서대로 정렬해서같은 부모 프로세스를 가진 자식 프로세스들끼리 모아 출력

  -p    : PID 출력

  -u    : UID 출력

  -G    : 프로세스 간의 관계를 보기 좋게 출력

  -V    : 버전 정보

 

 

ps (프로세스 상태 알기)

프로세스라는 것은 현재 실행되고 있는 프로그램들을 가리키는 

[서식]

  ps [-옵션]

 

[주요 사용 옵션]

  -a    : 모든 프로세스를 나열

  -c    : 해당 프로세스를 유발시킨 명령어 이름을 task struct 참조한다.

  -e    : 해당 프로세스에 관련된 환경변수 정보를 함께 출력

  -f     : 프로세스  상속관계를 트리 구조를 보여줌

  -h    : 메뉴는 보여주지 않음. (PID, TTY, STAT, TIME, COMMAND )

  -j     : 작업에 관련된 ID 출력

  -l     : j보다 자세하게 정보를 출력

  -u    : 사용자 이름과 프로세스가 시작된 시간을 출력

  -x    : 터미널에 종속되지 않는 프로세스들을 출력

  -n    : 사용자 정보를 ID 숫자로 표시

  -w    : 출력 결과를 생략하지 않고 출력

 

ps + 옵션   결과가 출력될 때에  부분에 나타나는 메뉴들의 뜻은 다음과 같다

 

          PID(Process ID)                 : 프로세스마다 주어지는 번호

          TTY(Tele TYpewrite)           : 명령어가 실행되는 터미널의 번호

          STAT(STATe)                     : 실행되고 있는 프로세스 상태 (R, S, D, T, Z, W, N)

          START(START)                  : 프로세스가 시작된 시간

          TIME(TIME)                       : CPU 사용한 시간

          USER(USER)                    : 사용자의 이름

          COMMAND(COMMAND)    : 사용자가 실행한 명령어

          UID(User ID)                      : 사용자의 ID

          PGID(Parent Group ID)       : 사용자 부모 프로세스의 그룹 ID

          SID(Session ID)                 : 세션 ID

          PRI(PRIority)                     : 실행하는 우선 순위에 따른 프로세스

          NI(Nice)               : nice 의한 우선 순위에 따른 프로세스

          RSS(Resident Set Size)     : 프로세스가 사용하는 메모리의 크기

          SZ(SiZe)              : 프로세스가 사용하는 자료와 스택의 크기

          SHRD(ShaReD)                 : 프로세스가 사용하는 공유 메모리

          %CPU                              : 프로세스가 사용하는 CPU 점유율

          %MEM                             : 프로세스가 사용하고 있는 메모리 점유율

          WCHAN                            : 프로세스가 실행하고 있는 커널 루틴

 

 

top (CPU 프로세스 상황 보여주기)

top 시스템의 프로세스 수가 얼마이고  개의 프로세스가 돌아가고 있고 어떤 사용자와 데몬들이 있는지, CPU 상태는 어떤지 등에 대한 정보를 실시간으로 보여준다.

[서식]

  top

[주요 사용 옵션]

  space            : 변환된 값을 보여준다.

  ^L                 : 화면을 clear 후에 새로 출력

  f                    : 출력된 정보를 추가적으로  선택한다

  h / ?             : top 에서 사용할  있는 명령어와 그에 대한 설명을 출력

k                  : 지정한 프로세스에 시그널을 보내 프로세스를 끝낼  있게 한다.

  l                    : 평균 시스템 부하를 보여주는 기능으로 전환

  m                  : 메모리 정보를 보여주는 기능으로 전환

n / #            : 보여주는 프로세스의 개수를 지정

q                 : top 종료

r                  : 지정한 프로세스의 nice값을 재조정

 

s               :  초마다 정보를 갱신할 것인지 결정한다.

  t                   : 합계 정보를 보여주는 기능으로 전환

  k                  : 지정한 프로세스에 시그널을 보내 프로세스를 끝낼  있게 한다.

C               : 명령어의 전체 경로를 보여주는 기능으로 전환

I                 : 유휴 프로세스 (idle process) 보여주는 기능으로 전환

  P                  : CPU 사용률에 따라 정렬

  M                  : 상주 메모리 (resident memory) 따라 정렬
        S                : 실행이 끝난 프로세스의 CPU 시간까지 포함하여 프로세스가 점유한

                        CPU 시간을 표시

  T                   : 현재 CPU 타임  누적 CPU 타임 비율로 정렬

  W                 : 현재 설정을 ~/.toprc 파일에 저장하여 다음  실행할  현재 설정된

                       대로 실행되게 

 

 

kill (프로세스 죽이기)

[서식]

  kill [-옵션] pid

  kill [-옵션시그널

 

[주요 사용 옵션]

  -s 시그널       : 특별히 보낼 시그널 지정

  -p                  : 실행중인 프로그램의 이름만을 출력

  -l 시그널       : 시그널로 사용할  있는 시그널 이름들을 출력

                        이것은 /usr/include/linux/signal.h 에서   있음.

 

[사용법]

  ps 실행 중인 프로그램의 id 확인

  kill 실행 중인 프로그램 중단

  강제로 실행 중인 프로그램을 종료 시킬 때에는 옵션으로 –9, -SIGKILL, -KILL 등은 사용하면

  된다.

 

  자주 사용되는 시그널의 의미

 

          SIGUP   : hangup, 로그아웃 하거나 접속을 끊을  발생하는 시그널특정의 실행

중인 프로그램이 이용하는 설정 파일을 변경시키고 변화된 내용을 적용할

 이용

 

             SIGINT   : interrupt, 현재 작동 중인 프로그램의 동작을 멈출  사용

 

             SIGQUIT : quit, SIGINT 마찬가지로 종료 키를 누를  커널에 의해 보내지는데

                           일반적인 값은 ^c. SIGQUIT 비정상적인 종료이므로 코어파일을 생성

                           하고 종료한다는 것이 차이이다.

 

             SIGKILL : kill, 무조건 해당 실행 중인 프로그램을 중지.

 

             SIGSEGV : segmentation violation, 메모리 액세스가 잘못 되었을  발생

 

             SIGTERM : terminate, 실행중인 프로그램에 정의되어 있는 정상적인 종료방법

                           으로 프로그램을 끝내게 한다. Kill 명령에서 시그널을 특별히 지정하지

                           않으면  시그널을 이용하여 프로그램을 끝낸다.

 

 

nice (프로그램 우선순위 변경하기)

각각의 프로세스들에 우선 순위를 부여하여 프로세스를 관리하고자   이용

 

[서식]

  nice [-n 조정수치] [--adjustment=조정수치] [변수]

 

[주요사용 옵션]

  -n adjustment,

  -adjustment,                         : 명령의 우선권에 10 대선 조정 수치를 더한다.

  --adjustment=adjustment

  -h                                            : 도움말

  -v                                             : 버전 정보

 

 

[사용법]

 

 기본적으로 아무런 옵션 없이 nice 사용하면 상속 받은 현재 순서의 우선권을 출력한다옵션
    으로 조정 수치를   값의 범위는 –20~19 까지 이다.

수치가 작을수록 높은 우선 순위를 갖게 된다.

 

 

cron  crontab

정기적으로 명령이나 프로세스를 스케줄   cron 프로그램을 쓰며, crontab 파일에 명령을 실행하려는 시간과 날짜를 지정하면 되는데 시간은  또는 요일의 항목으로 지정할  있다.

cron 프로그램은 시스템이 부트    번만 시작된다개별 사용자는 cron  직접 실행할 권한이 없다또한 시스템 관리자는 명령의 이름을 입력하여 cron 시작해서는  된다시스템 부트 순서 중에 실행할 명령  하나로서  스크립에 cron 나열해야 한다.

Crontab 사용하기 위해서는 아래 형식에 맞춰 입력 파일을 준비해야 한다.

 

          minute  hour  day  month  weekday    command

 

          minute    : 0 ~ 59

          hour       : 0 ~ 23

          day        : 1 ~ 31

          month    : 1~ 12

          weekday : 1 ~ 7 (1=Mon, 2=Tue, 3=Wed, 4=Thu, 5=Fri, 6=Sat, 7=Sun)

          command : 실행할 명령

 

 

명령어의 출력은 사용자에게 mail 유틸리티를 통하여 전송된다처음 다섯 항목 중에서 어느 것이라도 숫자 대신에 * 가지고 있으면  항목은 항상 일치되게 되어 있다. % 다음의 문자는 임시 파일에 복사되고 명령의 표준 입력으로사용된다.