네트워크
소스 파일 |
◉멀티 프로세스 프로그래밍
●fork()
- 리눅스는 프로세스를 복사할 수 있다.
- fork 함수가 바로 그 역할을 한다.
- 세포로 분열을 본 따서 fork함수를 호출한 프로세스를 부모 프로세스(parent process), 새로 만들어진 프로세스를 자식 프로세스(child process)라고 한다.
●fork() 실습
- fork를 통해 2개가 생성되는지를 확인한다.
- Source Coding
- main1이 각각 다른 PID로 2개 실행되고 있다.
- 소스에 포함된 2번의 getchar()로 인해 엔터를 2번 입력한 최종 결과는 다음과 같다.
●자식 기다리기
- fork()를 통해 복사를 하더라도 이름만 다를 뿐 동등하다.
- 부모는 자식의 번호(PID)를 알 수 있다.
- 자식의 프로그램이 끝났는지를 알 수 있다.
- Source Coding
- 결과
- 쉘의 특수 변수
- echo $? : 최근 실행된 명령어의 리턴 값을 저장하고 있다.
- 좀비 프로세스
- wait 함수를 호출하지 않으면 발생한다.
- 아무 일도 하지 않는다.
- 쓸모가 없다.
- 메모리를 차지하고 있다.
- 운영체제에 있어서 일종의 자원낭비이다.
●client.c <파일 첨부 : client.c>
- 먼저 client.c를 수정한다.
- 현재 작성된 client.c는 키 입력을 받아야 메시지 수신이 가능하다.
- 키 입력과 메시지 수신을 fork()를 사용하여 별개로 분리한다.
- 수정 전 소스
- 수정 후 소스
- 결과
●server.c <파일 첨부 :server.c>
- 일반적으로 서버가 다수의 클라이언트를 처리하므로 Server를 수정한다.
- server는 대화에 관여하지 않고 클라이언트끼리 통신이 가능하게 수정한다.
- 기존에 소스는 accept가 되면, 소켓을 닫아버린다.
- 2명 이상의 접속이 불가하다.
- fork()를 통해 부모와 자식으로 분리하여 역할을 부여한다.
- 부모 : 랑데뷰
- 자식 : 커뮤니케이션 소켓
- 결과1
- 결과2
- 문제점 발생 : 클라이언트의 채팅내용을 Server만 볼 수 있다.
- 결과3
- 문제점 발생 : 종료가 되지 않는다.
- 수정 및 추가사항 댓글로 달아주세요.
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
2015-08-13 9번 김태현 업무일지 해커스쿨 level1, VMware 셋팅 (4) | 2015.08.14 |
---|---|
ARM 인터럽트소스 (1) | 2015.07.31 |
20150730-7번-김재홍-IPC(내부 프로세스 간 통신 설비)통신 (4) | 2015.07.31 |
20150729-6번-김성현-ARM7 (6) | 2015.07.30 |
20150727-출석번호 5번 - 김성주 - 업무일지 (5) | 2015.07.27 |
2015-07-21 32번 천정호 AT91ARM7S256 Chip 분석 및 ARM을 이용한 LED 제어 (7) | 2015.07.22 |
20150720-31번-차윤도-ARM bootcode분석,Datasheet 중간프로젝트 (7) | 2015.07.20 |
2015.07.17(금) 주재민 -스테핑 모터,ARM Compiler 설치,Cygwin 설치 (2) | 2015.07.17 |