인터페이스를 단순화하는 것입니다. 에 대한 대안 fork
과는 exec
윈도우 같은 것 의 CreateProcess 기능. 얼마나 많은 매개 변수 CreateProcess
가 있고 많은 매개 변수 가있는 구조체입니다. 때문입니다 모든 새 과정에 대해 제어 할 수있는가에 전달되어야한다 CreateProcess
. 실제로 CreateProcess
충분한 매개 변수가 없으므로 Microsoft는 CreateProcessAsUser 및 CreateProcessWithLogonW 를 추가해야했습니다 .
fork/exec
모델을 사용하면 모든 매개 변수가 필요하지 않습니다. 대신 프로세스의 특정 속성이에 유지 exec
됩니다. 이것은 당신이 할 수 있습니다 fork
, 다음 (일반적으로 사용하는 것과 동일한 기능을 사용하여) 당신이 원하는 속성을 어떤 과정을 변경 한 후 exec
. Linux에서는 fork
매개 변수 execve
가 없으며 3 : 실행할 프로그램, 명령 줄 및 환경이 있습니다. (다른 exec
기능이 있지만 execve
일반적인 사용 사례를 단순화하기 위해 C 라이브러리에서 제공하는 래퍼 입니다.)
다른 현재 디렉토리와 프로세스를 시작하려면 : fork
, chdir
, exec
.
stdin / stdout :을 리디렉션하려면 fork
파일을 닫거나 엽니 다 exec
.
당신은 스위치 사용자가 원하는 경우 fork
, setuid
, exec
.
이 모든 것을 필요에 따라 결합 할 수 있습니다. 누군가가 프로세스 속성의 새로운 종류와 함께 온다면, 당신은 변경할 필요가 없습니다 fork
와 exec
.
Larsk가 언급했듯이 대부분의 최신 Unix는 COW (Copy-On-Write)를 사용하므로 fork
상당한 오버 헤드가 발생하지 않습니다.
fork(2)
리눅스 의 매뉴얼 페이지는 다음과 같이 말합니다 :Under Linux, fork() is implemented using copy-on-write pages, so the only penalty that it incurs is the time and memory required to duplicate the parent's page tables, and to create a unique task structure for the child.
나는 이것이 다른 현대 유닉스 풍미의 경우라고 생각합니다 (그러나 확실하지는 않습니다).