Process > 개발자팁

개발자팁

개발과 관련된 유용한 정보를 공유하세요.
질문은 QA에서 해주시기 바랍니다.

Process 정보

기타 Process

본문

Process
 
7.1 Process
프로그램은 프로세스가 될 가능성을 간직한 채 디스크에 잠들어 있는 정보를 의미하며 프로세스는 프로그램이 메모리상에서 활동하고 있는 상태

7.1.1 생성
하나의 프로세스가 다른 프로세스를 생성할 경우 원래의 프로세스가 더 이상 남아 있을 필요가 없다면 exec() 호출을 통하여 자신을 다른 프로그램을 실행하는 새로운 프로세스로 대치할 수가 있다.
원래의 프로세스가 계속 존재하려면 fork() 호출을 통하여 자신의 복사본 프로세스를 먼저 만들고 복사본 프로세스에서는 다시 exec() 호출을 통하여 자신을 다른 프로그램을 실행하는 새로운 프로세스로 대치한다.
[root @edu00 linux]#pstree
init 프로세스가 커널 이후에 실행되는 최초의 프로세스가 되고 그 밑으로 자식 프로세스들이 생성되게 된다. 하나의 프로그램이 다른 프로그램을 시작할 때  그 새로운 프로세스를 서브 프로세스 혹은 자식 프로세스라고 한다.
shell이 또 다른 shell을 시작할 때 그 새로운 shell을 서브 shell이라 한다.
자식 프로세스는 부모 프로세스의 환경을 물려받는다. 그리고 자식 프로세스가 자신의 환경을 변경할 때 그것은 부모 프로세스에게 전달되지 않는다.

다음은 프로세스의 생성 과정이다.
[root @edu00 linux]#bash
[root @edu00 linux]#ps
[root @edu00 linux]#bash
[root @edu00 linux]#ps
[root @edu00 linux]#exec ps
7.1.2 상태보기
user(BSD)  프로세스 소유자의 username
uid(sys V)  프로세스 소유자의 username
pid   프로세스 식별 번호
%cpu  cpu 사용 비율의 추정치
%mem  메모리 사용 비율의 추정치
SZ   K 단위 혹은 페이지 단위의 가상 메모리 사용량
RSS   실제 메모리 사용량
TTY   프로세스와 연결된 터미널 포트
STAT  프로세스의 현재 상태
R  실행 중 혹은 실행될 수 있는 상태
 S  sleep
 I  idle (비활동 상태:BSD, 중간적 상태:sys V)
 T  정지된 상태(suspend)
 Z  좀비(zombie) 프로세스
 D  디스크 관련 대기 상태
 P   페이지 관련 대기 상태
 X  메모리 확보를 위해 대기중(sys V)
 K  사용 가능한 커널 프로세스(aix)
 W  스왑 out된 상태
 N  nice되어진 상태
 >  우선 순위가 인위적으로 높아진 상태
TIME  총 CPU 사용 시간
COMMAND  프로세스의 실행 명령행
STIME(sys V) 프로세스가 시작된 시간 혹은 날짜
C(sys V), CP(BSD) 짧은 기간동안의 CPU 사용율
F   프로세스의 플래그들
PPID  부모 프로세스
PRI   실제 실행 우선 순위
NI   nice
WCHAN  프로세스를 기다리는 이벤트
7.1.3 command
[root @edu00 linux]#ps aux
[root @edu00 linux]#ps -ef
[root @edu00 linux]#ps aux | grep httpd
 
7.1.4 top
프로세스를 모니터할 수 있는 유틸리티로 프로세스의 활동을 실시간으로 모니터링한다.
CPU와 메모리 등에 대한 시스템 정보를 보여준다.

7.1.4.1 top 실행시 각 항목의 의미 (라인별)
1) 현재 시간, 시스템 부팅 후 경과 시간, 로그인한 사용자의 수, 세 개의 부하 평균값
(1분, 5분, 15분 동안의 프로세스 수의 평균)
2) 실행되고 있는 프로세스의 통계 값
   실행 중인 프로세스의 총 갯수, 프로세스 상태(sleeping, running, zombie, stopped)
3) CPU 상태
   사용자, 시스템, nice, idle 프로세스가 사용한 CPU 시간의 비율을 %화
4) 메모리 상태
   총 메모리, 사용 중인 메모리, 사용 가능한 메모리, 공유 메모리, 버퍼에 사용되고
 있는 메모리의 양
5) 스왑 상태
   사용 가능한 총 스왑, 사용 중인 스왑, 사용 가능한 스왑, 캐쉬에 사용되고 있는
 스왑 공간
6) PID Process ID
   PPID parent Process ID
   UID
   USER
   PRI 현재 지정된 우선순위이며 자동으로 바뀐다.
NI nice 값은 특별히 지정하지 않으면 0이며, 범위는 -20 - 19, 값이 작을
수록 우선순위가 높다.
   SIZE 프로세스의 코드와 데이타의 크기(KB)
   TSIZE 프로세스의 코드 사이즈
   DSIZE 프로세스의 데이타 사이즈
    SWAP 
    RSS 프로세스가 사용하는 실제 메모리 양(여러 라이브러리 등에 사용하는
메모리 총량)
    SHARE 
    STAT S : sleeping, D : uninterruptable sleeping, R : running, Z : zombie,
 T : stop or trace
             위 상태코드 뒤에 <, N, W
             < : 음수의 nice 값
             N : 양수의 nice 값
             W : 현재 메모리에서 디스크로 스왑되어 있는 상태
     LIB 라이브러리 페이지 크기
     %CPU CPU 사용량의 비율
     %MEM 
     TIME 프로세스가 시작하여 사용한 총 CPU 시간
     COMMAND 프로세스를 실행한 명령어 라인

7.1.4.2 top 명령
    SPACE 화면 갱신
    h, ? 
    k  kill
    I  zombie, idle 프로세스들의 출력을 on/off
    n, # 출력할 프로세스의 수를 지정
    q  종료
    r  nice 값 변경
    s  화면을 갱신하는 시간을 변경
    F, f 보여줄 항목을 추가하거나 삭제
    O, o 보여줄 항목의 순서를 변경
    l  첫 라인(uptime) on/off
    m  메모리 관련 항목 on/off
    t  프로세스와 CPU 항목을 on/off
    c  command line의 항목을 on/off
    M  프로세스를 RSS 값으로 정렬
    P  %CPU 값으로 정렬(default)
    T  time 값으로 정렬
    W  설정을 저장   

7.2 signal 보내기(kill)
7.2.1 개념
프로세스간 통신 수단이 signal이라고 할 수 있다. 하나의 프로세스가 다른 프로세스에게로 메시지를 보내기 위한 수단이다. kill은 프로세스를 죽이라는 명령이 아니라 signal을 보내라는 명령이다.

7.2.2 종류
이름  번호 의미
HUP  1 Hangup  (실행 종료, 로그 아웃하거나 모뎀 접속을 끊을 때 보내진다.)
INT  2 Interrupt (실행 종료, Ctrl+c를 누르면 보내진다.)
QUIT 3 Quit   (실행 종료, Ctrl-\를 누르면 보내진다.)
KILL  9 Kill   (무조건 종료)
SEGV 11 Segmentation Violation(허가되지 않은 메모리 영역에 접근 하였다.)
TERM 15 Terminate (가능한 정상 종료)
CONT 18 Continue  (Stop이나 TSTP에 의해 정지된 프로세스가 다시 실행을 계속한다.)
STOP 19 무조건적으로 그리고 즉각적으로 정지
TSTP 20 Stop (실행을 정지시킨 후 다시 실행을 계속하기 위하여 대기, Ctrl+z)

7.2.3 사용법
[root @edu00 linux]#kill <pid>
[root @edu00 linux]#kill -<signal> <pid>

[root @edu00 linux]#ls -lR / > tt 2 > /dev/null &
[root @edu00 linux]#ps
[root @edu00 linux]#kill -9 <pid>
[root @edu00 linux]#ps
   
7.3 Multitasking
동시에 하나 이상의 프로그램을 실행시킬 수 있는 multitasking은 linux의 장점중 하나이다.
   
7.3.1 foreground, background & suspend
linux에서는 프로그램을 foreground와 background로 구별한다.
이 기능으로 하나 이상의 작업을 console에서 사용할 수 있다.
foreground : 화면에 출력시키면서 실행되는 상태(입력 가능)
background : 화면에 보여주지 않으면서 실행되는 상태(입력 불가능)
suspend : 메모리에 올라가 있지만 정지되어진 상태
 
7.3.2 foreground로 실행
일반적인 작업은 모두 여기에 해당된다.
[root @edu00 linux]#ls -lR / > ls.txt 2> /dev/null
 
7.3.3 background로 실행
foreground로 실행하는 것과 비슷하지만 뒤에 &를 붙이면 화면 뒤에서 실행된다.
동시에 다른 작업을 할 수 있지만 background로 할 수 있는 작업은 제한되어 있다.
예를 들면 vi는 background로 실행한다면 suspend될 것이다.
[root @edu00 linux]#ls -lR / > ls.txt 2> /dev/null &
[root @edu00 linux]#ps
[root @edu00 linux]#jobs

7.3.4 foreground를 suspend로
foreground로 실행되는 프로그램을  suspend시킬 수 있다.
Ctrl+Z를 누르면 실행 중이던  프로그램이 suspend된다.
Ctrl+C와 비교하면 좋을 것이다.
      
[root @edu00 linux]#ls -lR / > tt 2> /dev/null
Ctrl+Z
[1]+ Stopped
[root @edu00 linux]#ps
[root @edu00 linux]#jobs

Suspend된 것을 다시 foreground로 하기 위해서는 "fg %<작업번호>를 사용한다.
위에서 [1]이 작업 번호이다.
[root @edu00 linux]#fg %1

Suspend된 것을 다시 background로 하기 위해서는 "bg %<작업번호>를 사용한다.
[root @edu00 linux]#bg %1
[root @edu00 linux]#jobs

7.3.5 daemon
process들 중에서 특별한 이름을 가지고 있는 것들이 있다.
그 중에서 daemon은 background로 실행되면서 server의 역할을 하거나 그 기능을 도와주는 process를 말한다.
[root @edu00 linux]#ps aux | grep httpd
httpd는 web service를 해주는 daemon이다.
    
7.3.5.1 standalone 방식
보통 부팅 시에 실행되는 process로 메모리에 계속 상주해 있으면서 client에게 service를 해준다.
서비스 요구가 빈번하거나 항상 요구되는 서비스일 경우 이런 방법으로 수행된다.
    
7.3.5.2 inet 방식
client로 부터 요청이 있을 때 process가 되어 서비스를 한다.
이 방법으로 쓰이는 것 중 대표적인 것이 in.telnetd이다.
이 daemon은 telnet을 서비스해주는 daemon이다.
그리고 이런 데몬들을 관리하는 데몬이 있는데 그것이 super daemon 또는 inet daemon이라고 한다. 이 데몬은 standalone 방식으로 실행되며 inet 방식의 데몬들에 대해 TCPWRAPPER를 작동시킬 수 있다.
tcp wrapper는 inet 방식의 데몬을 실행할 때 다른 처리 단계를 거칠 수 있게 한다.
즉, telnet 데몬을 특정 IP에게만 허락한다든지 하는 기능을 할 수 있다. 

 

[이 게시물은 관리자님에 의해 2011-10-31 17:32:05 Linux에서 이동 됨]
추천
0
  • 복사

댓글 0개

© SIRSOFT
현재 페이지 제일 처음으로