Skip to content

fork(2)

man.org / fork


fork() 시스템 호출은 새로운 프로세스를 생성하는 데 사용됩니다. 이 새로운 프로세스는 호출한 프로세스(부모 프로세스)의 복사본이 되며, 이를 자식 프로세스라고 합니다. 자식 프로세스는 부모 프로세스의 데이터, 코드, 파일 설명자 등을 상속받습니다. 그러나 자식 프로세스는 독립적으로 실행되며 부모 프로세스와 별도로 자신의 메모리 공간을 사용하게 됩니다.

요약:#

  • 프로세스 생성: fork()는 부모 프로세스의 복사본인 자식 프로세스를 생성합니다.
  • 반환 값:
  • 부모 프로세스에서는 자식 프로세스의 PID가 반환됩니다.
  • 자식 프로세스에서는 0이 반환됩니다.
  • 에러가 발생하면 -1이 반환되며 자식 프로세스는 생성되지 않습니다.
  • 메모리 공간: 자식 프로세스는 부모 프로세스와 동일한 메모리 공간을 복사하지만, 수정 시 복사(Copy-On-Write)를 통해 독립적인 메모리 공간을 유지합니다.
  • 자식 프로세스는 독립적인 실행: 부모와 자식 프로세스는 서로 독립적으로 실행되며, 어느 프로세스가 먼저 실행될지는 운영체제가 결정합니다.
  • 시그널 처리: 부모와 자식 프로세스는 독립적으로 시그널을 처리합니다.

주의 사항:#

  • 자식 프로세스는 부모 프로세스가 가진 대부분의 상태를 상속하지만, 파일 잠금, CPU 시간, 프로세스 ID 등은 상속되지 않습니다.
  • 부모와 자식은 독립된 프로세스로 서로 다른 메모리 공간을 가지며, 하나의 프로세스에서 메모리를 변경하더라도 다른 프로세스에 영향을 미치지 않습니다.

이 시스템 호출은 다중 프로세스 프로그래밍에서 매우 중요한 기능으로, 특히 병렬 처리나 서버 애플리케이션에서 사용됩니다.