728x90
데몬 프로세스
프로세스(process)란
- 현재 실행 중인 프로그램
- 프로그램 : 어떤 문제를 해결하기 위해 사용되는 명령어나 유틸리티의 집합
- 프로그램을 실행하면 메모리(RAM, 주기억장치)에 상주. 이 때의 프로그램을 프로세스라고 함
- 시스템 운영에 필요한 기능을 수행하는 시스템 프로세스, 사용자들이 실행시킨 사용자 프로세스
- 사용자의 입력에 관계없이 실행되는 백그라운드(Background) 프로세스, 명령 입력 후 수행종료까지 기다려야 하는 포그라운드(Foreground) 프로세스
멀티태스킹(Multitasking)과 작업 전환
- 멀티태스킹이란 동시에 하나 이상의 프로그램을 실행하는 것
- 사용자 기준에서는, 다수의 프로그램들을 백그라운드 프로세스로 실행시킨 상태에서 추가로 포그라운드 프로세스로 다른 작업 수행 가능
- 사용자가 실행한 프로세스는 중간에 중지시킬 수 있음
- 백그라운드 프로세스를 포그라운드 프로세스로 전환하거나, 포그라운드 프로세스를 백그라운드 프로세스로 전환 가능
부모 프로세스와 자식 프로세스
- 프로세스는 부모-자식 관계가 있음
- 부모 프로세스가 자식 프로세스를 생성, 자식 프로세스는 다른 자식 프로세스를 생성
- 사용자가 실행시키는 명령도 프로세스로 실행됨.
- 사용자 명령은 쉘의 자식 프로세스가 됨
- 프로세스들은 각기 고유한 번호 PID(Process Identification Number)를 가짐
- 부모 프로세스는 고유 번호 PPID (Parent Process Identification Number)를 가짐
- 유닉스 부팅할 때 모든 프로세스의 조상인, PID가 1번인 init 프로세스 실행
- 1번 프로세스가 fork 방식으로 다른 프로세스들 생성
프로세스의 생성
- 하나의 프로세스가 다른 프로세스를 실행하기 위한 시스템 호출 방법 : fork, exec
- fork
- 새로운 프로세스를 위해 메모리를 할당받아 복사본 형태의 프로세스를 실행하는 형태
- 기존의 프로세스는 그대로 실행
- 새롭게 생성된 프로세스는 원래의 프로세스와 똑같은 코드를 기반으로 실행
- exec
- 원래의 프로세스를 새로운 프로세스로 대체하는 형태
- 호출한 프로세스의 메모리에 새로운 프로세스의 코드를 덮어씌워 버림
- 호출된 프로세스만 메모리에 남김
프로세스 초기화
- 프로그램을 사용하여 어떤 작업을 하기 위해서는 프로그램과 데이터가 메모리에 적재되어 있어야 함
- 프로그램과 데이터가 메모리에 적재되어 CPU의 연산 과정을 통해 실행될 수 있는 것을 프로세스라 함
- 메모리의 각 프로세스들은 모두 init 프로세스로부터 상속을 받아 생성됨
init 프로세스
- init 프로세스는 PID가 1번인 프로세스임
- 부팅 과정에서 커널이 PID 0번인 swapper 프로세스를 생성하고, swapper 프로세스가 init 프로세스를 생성
- init 프로세스는 /etc/inittab 파일을 읽어들여 실행됨
- init 프로세스가 사용자 환경에 필요한 스크립트를 실행시켜 사용자 환경이 구축되고 나면, 로그인 화면이 사용자에게나타남
- init 프로세스가 하는 일
- 파일 시스템의 구조 검사
- 파일 시스템 마운트
- 서버 데몬을 띄움
- 사용자 로그인을 기다림
- 사용자가 로그인하면 사용자를 위한 쉘을 띄움
시그널(Signal)
- ‘신호’라는 의미, 프로세스끼리 서로 통신할 때 사용
- 특정 프로세스가 다른 프로세스에게 메시지 보낼 때 시그널 이용
- 사용자가 인터럽트 키를 통해 발생하는 시그널, 프로세스가 발생하는 시그널, 하드웨어가 발생하는 시그널
- 시그널 목록은 ‘kill –l’ 명령으로 확인
데몬(daemon)
- 주기적이고 지속적으로 서비스 요청을 처리하기 위해 계속 실행되는 프로세스
- 백그라운드로 실행
- 서버 역할을 하는 프로그램들이 해당되고 보통 이름 뒤에 데몬을 뜻하는 d를 붙임
데몬 프로세스 실행 방식
- standalone 방식
- 부팅 시 실행되어 메모리에 계속 상주하면서 클라이언트의 서비스 요청을 처리하는 방식
- 웹, 메일 등 빈번한 요청이 들어오는 서비스
- 프로세스의 상태를 확인하는 ps 명령으로 확인해보면 항상 동작 중임
- inet 방식
- 클라이언트의 서비스 요청이 들어왔을 때 관련 프로세스를 실행시키고 접속 종료 후 자동으로 프로세스 종료시키는 방식
- 자주 사용하지 않는 서비스들에 대한 효율적인 메모리 관리에 유용함
프로세스의 종류
데몬 프로세스 (daemon process)
- 커널에 의해 실행되고 특정 서비스를 제공하기 위해 존재
- 웹 서비스를 제공하기 위해서는 httpd 프로세스가 동작하고 있어야 함
- httpd를 웹 서버 데몬이라 함
- 평소 대기 상태로 서비스 요청을 기다리다가 서비스 요청이 들어오면 해당 서비스 제공
부모 프로세스 (parent process)
- 다른 프로세스를 만드는 프로세스
- 부팅할 때 실행되는 1번 프로세스를 제외한 모든 프로세스는 부모 프로세스를 가지고 있음
- PPID(Parent Process ID)를 가짐
자식 프로세스 (child process)
- 부모 프로세스에 의해 만들어지는 프로세스
- 할 일이 끝나면 부모 프로세스에게 결과를 돌려주고 종료
- vi를 실행시키면 쉘이 vi 프로세스 생성
- 쉘이 부모 프로세스, vi가 자식 프로세스
- 사용자가 vi 종료하면 다시 부모 프로세스인 쉘로 돌아감
- PID(Process ID)를 가짐
고아 프로세스 (orphan process)
- 자식 프로세스가 아직 실행 중인데 부모 프로세스가 먼저 종료되면 자식 프로세스는 고아 프로세스가 됨
- 1번 프로세스가 새로운 부모 프로세스가 되어 고아 프로세스가 작업을 마치고 종료할 수 있도록 함
좀비 프로세스 (zombie process)
- 자식 프로세스가 실행 종료 후에도 프로세스 테이블 목록에 남아있는 경우
- 일반적으로, 자식 프로세스가 종료할 때 부모 프로세스에게 종료 정보(exit status) 보내고, 부모 프로세스가 이 정보 받으면 프로세스 테이블 목록에서 자식 프로세스 삭제됨
- 부모 프로세스가 자식 프로세스의 종료 정보를 읽어가기를 기다림
- 프로세스 목록에 defunct 프로세스라고 나오기도 함
- 실제로 실행되고 있지 않지만 동작 중인 프로세스 테이블 목록을 차지
- 부모 프로세스에게 SIGCHILD 시그널을 보내서 부모 프로세스가 자식 프로세스를 정리하게 하거나, 부모 프로세스 자체를 종료시킴
- 부모 프로세스가 종료되면 좀비 프로세스는 고아 프로세스가 됨
- 새로운 부모인 init 프로세스가 자식 프로세스의 종료 정보를 주기적으로 확인, 정리
728x90
'프로그래밍 > Unix' 카테고리의 다른 글
유닉스 포그라운드(foreground), 백그라운드(background) (0) | 2020.03.24 |
---|---|
유닉스 프로세스 관리 명령 (0) | 2020.03.23 |
유닉스 기본 접근 권한 설정 (0) | 2020.03.23 |
유닉스 접근 권한 변경 (0) | 2020.03.23 |
유닉스 파일의 속성 (0) | 2020.03.23 |