<P> Some embedded operating systems such as uClinux omit fork and only implement vfork, because they need to operate on devices where copy - on - write is impossible to implement due to lack of an MMU . </P> <P> The Plan 9 operating system, created by the designers of Unix, includes fork but also a variant called "rfork" that permits fine - grained sharing of resources between parent and child processes, including the address space (except for a stack segment, which is unique to each process), environment variables and the filesystem namespace; this makes it a unified interface for the creation of both processes and threads within them . Both FreeBSD and IRIX adopted the rfork system call from Plan 9, the latter renaming it "sproc". </P> <P> "clone" is a system call in the Linux kernel that creates a child process that may share parts of its execution context with the parent . Like FreeBSD's rfork and IRIX's sproc, Linux's clone was inspired by Plan 9's rfork and can be used to implement threads (though application programmers will typically use a higher - level interface such as pthreads, implemented on top of clone). The "separate stacks" feature from Plan 9 and IRIX has been omitted because (according to Linus Torvalds) it causes too much overhead . </P> <Table> <Tr> <Td> </Td> <Td> This section relies largely or entirely on a single source . Relevant discussion may be found on the talk page . Please help improve this article by introducing citations to additional sources . (February 2015) </Td> </Tr> </Table>

Fork can fail if there are no more process ids available for allocation by the operating system