Zettelkasten

OS가 Process에 대해 fork, wait, exec(API)를 할 수있다.

·수정 2026.04.23·수정 1

요약

  • OS는 프로세스에 복제, 대기, 실행이라는 명령이 가능하다.
  • 실행만 존재하지 않고 복제와 실행이 나눠진 이유는 생성시점과 복제 시점을 분리해 자식 프로세스와 부모 프로세스 사이에 상호작용을 쉽게 컨트롤 하기 위함

본문

  • fork

    • 프로세스가 fork() 시스템 콜을 호출하면 분리된 주소 공간, 레지스터, PC값을 같는 프로세스가 복제됨
  • wait

    • wait 시스템 콜을 이용해 자식 프로세스 종료 시점까지 자신의 실행을 중단시킬 수 있음
  • exec

    • 자기 자신이 아닌 다른 프로그램을 실행해야할 때 사용함
  • 왜 새로운 프로세스를 생성하기 위해 이런 이상한 인터페이스를 만들까?

    • fork와 exec가 분리되는게 이상함
    • 쉘에서 많은 유용한 일을 쉽게 할 수 있음
  • ex1

wc p3.c > newfile.txt
  • 이 파일은 p3.c의 출력 결과물을 newfile.txt로 보내는 명령어임
  • 이런 프로그램을 작성할때 해당 설계는 강점을 보이는데 실행과 복제를 분리함으로써 새프로그램 실행 전 동작을 제어할 수있음, 세밀한 제어가 가능하다는 뜻
  • 이게 가능하려면 p3.c 실행 이전에 표준 출력을 파일로 바꿔야함 만약 실행만 존재한다면, 실행 이전 동작을 제어가기가 어려웠을 것임
  • ex2
grep foo | sort
  • grep 출력을 sort의 입력으로 연결 가능해야하는데
  • 부모가 먼저 파이프를 만듦
    • 파이프는 읽기, 쓰기용 파일 디스크립터 두개로 이루어진 커널 버퍼
  • fork() 두번 호출
    • 첫번째 자식 stdout을 파이프의 쓰기에 연결, exec(grep, 'foo') 실행
    • 두번째 자식 stdin을 파이프의 읽기쪽에 연결 exec('sort') 실행
  • 파이프 fd 닫기
  • 추천 책
    • A Multiprocessor System Design
    • Programming Semantics for Multiprogrammed Computations
    • Hints for Computer System Desgin
    • Advanced Programming in the Unix Environment

참고

Process는 프로그램의 인스턴스(실행중)이다. https://pages.cs.wisc.edu/~remzi/OSTEP/Korean/05-cpu-api.pd