[시스템프로그래밍실습] fork() and Signal Processing
- 최초 등록일
- 2015.06.19
- 최종 저작일
- 2014.04
- 11페이지/
MS 워드
- 가격 2,500원
![할인쿠폰받기](/images/v4/document/ico_det_coupon.gif)
소개글
본 프로그램은 fork()을 이용해서 child process를 생성하여 client와 server간에 문자열 전송 및 수신을 하고, 해당 문자열이 “QUIT”인 경우 설치한 Signal Handler을 사용하여 프로세스를 종료하는 프로그램이다.
목차
1. Program Introduction - overall description, backgrounds
2. Algorithm specification - pseudo code, flow chart
3. Source Code
4. References
본문내용
1. Program Introduction
1.1 overall description
본 프로그램은 fork()을 이용해서 child process를 생성하여 client와 server간에 문자열 전송 및 수신을 하고, 해당 문자열이 “QUIT”인 경우 설치한 Signal Handler을 사용하여 프로세스를 종료하는 프로그램이다. Server와 Client측의 자세한 수행은 다음과 같다.
▶ Server
→ 실행 시, 인자로 포트번호를 입력 받는다. (E.g. ./srv 1000)
→ Client와 연결된 후, 새로운 프로세스를 생성하여 다음과 같은 작업을 각각 수행한다.
Parent Process -> 연결된 Client의 정보 출력 (IP, Port) 및 다음 client와 연결준비.
Child Process -> Client에게 문자열을 받고, 해당 문자열을 그대로 다시 전송. 반복.
단, 해당 문자열이 “QUIT”일 경우, 해당 Client와 연결 종료.
SIGALRM Signal을 호출하여 해당 프로세스도 종료.
→ Process가 새로 생성될 때 마다 해당 Process의 PID 출력.
▶ Client
→ 실행 시, 인자로 서버의 주소와 포트번호를 각각 입력 받는다.
(E.g. ./cli 127.0.0.1 1000)
→ 서버와의 연결이 성공하면, 아래와 같은 행위를 반복함. 단, 아래 동작 중 하나라도 실패하면 서버와의 연결 종료 후 해당 프로세스 종료.
(1) 사용자로부터 문자열 입력 받음.
(2) 서버로 해당 문자열 보냄.
(3) 서버로부터 문자열 받아서 그대로 출력.
child process가 종료되면 child process의 자원들을 정리해 줄 필요가 있다. parent process가 정리를 해주지 않으면 zombie process가 되어 자원이 낭비된다. 따라서 wait()함수로 child process가 종료된 걸 catch해서 정리해준다.
참고 자료
리눅스 시스템 프로그래밍/김성우 이중화 이종민 저/두양사출판/2006.8.25발행
UNIX 고급 프로그래밍 제 2판/리처트 스티븐스, 스티븐 레이고 저/대웅출판