UNIX 서버 5주차

2022. 4. 19. 11:21·학교수업
반응형

프로세스 생성

- fork() 시스템 호출

-> 부모 프로세스를 똑같이 복제하여 새로운 자식 프로세스를 생성

-> 자기 복제

 

#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);
// 새로운 자식 프로세스 생성
// 자식 프로세스에게는 0 반환, 부모 프로세스에게는 자식 프로세스 ID 반환

fork()는 한 번 호출되는데, 두 프로세스에서 반환 작업이 다르게 이루어진다.

- 이 후 부모 프로세스와 자식 프로세스는 병행적으로 각각 실행을 계속

 

부모 프로세스와 자식 프로세스의 구분은 fork()호출 후 두 프로세스의 반환 값이 다르기에 반환값으로 확인.

-> 반환값을 통해 서로 구분하며, 서로 다른 과업 실행 가능

ex)

pid = fork();
if(pid==0)
{자식 프로세스가 실행할 코드}
else
{부모 프로세스가 실행할 코드}

 

프로세스 기다리기

- wait()

-> 자식 프로세스 중 하나가 끝날 때까지 기다린다.

#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status); //끝난 경우 알려주기 위해 사용
pid_t waitpid(pid_t pid, int* statloc, int options);

child = wait(&status); // 자식 프로세스가 끝나길 기다림.

 

pid1=fork();

waitpid(pid1,&status,0); // 어떤 자식 프로세스를 기다릴지 결정

 

fork를 했을 때, 부모가 열어 놓은 파일을 자식이 공유.

부모의 fd 테이블이 자식에게 복사된다.(같은 파일 디스크립터 공유)

 

프로그램 실행

- fork() 후 프로세스 이미지가 그대로 복제되었다.

- 자식 프로세스에게 새 프로그램 실행 -> exec() 시스템 호출 사용

-> 프로세스 내 코드 영역을 새로운 프로그램의 코드로 대체한 후 실행

- 보통 fork() 후에 exec()

 

exec()

- 현재 코드 영역 대체 후, 새 프로그램의 main()실행

- 성공한 exec()코드는 절대로 기존 코드로 복귀하지 않는다.

자주 사용하는 명령어

int execl(char * path, char* arg0, char* arg1, ..., char* argnm NULL)

int execvp(char* file, char* argv[])

 

system() 함수 구현 : fork(), exec(), waitpid() 시스템 호출로 구현

 

dup2(fd,1); 1은 표준 출력이며, 1에 fd를 덮어씌운것과 똑같다. 

반응형
저작자표시 (새창열림)

'학교수업' 카테고리의 다른 글

인공지능개론 7주차  (0) 2022.04.20
UNIX서버 6주차  (0) 2022.04.20
UNIX서버 4주차  (1) 2022.04.19
윈도우즈 프로그래밍 5주차  (0) 2022.04.16
윈도우즈 프로그래밍 6주차  (0) 2022.04.16
'학교수업' 카테고리의 다른 글
  • 인공지능개론 7주차
  • UNIX서버 6주차
  • UNIX서버 4주차
  • 윈도우즈 프로그래밍 5주차
숯불돼지왕갈비
숯불돼지왕갈비
  • 숯불돼지왕갈비
    게임 개발 공부기
    숯불돼지왕갈비
  • 전체
    오늘
    어제
    • 분류 전체보기 (302)
      • 학교수업 (165)
      • 취업강의 (6)
      • C++ (49)
        • 코딩 테스트 (4)
      • Unreal Engine 5 (25)
        • MMORPG 개발 (25)
      • Unreal Engine 4 (44)
        • Omak Project (3)
        • Unreal Engine 4 개발일지 (9)
        • Unreal Engine 4 (32)
      • Unity (1)
        • 개발 일지 (1)
      • 수학 (3)
        • 소프트웨어 공학용 수학 (3)
      • DirectX 11 (4)
      • 게임 디자인 패턴 (2)
      • 포트폴리오 (1)
      • 자격증 (1)
        • 정보처리기사 (0)
        • SQLD (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
숯불돼지왕갈비
UNIX 서버 5주차
상단으로

티스토리툴바