124 lines
2.7 KiB
HTML
124 lines
2.7 KiB
HTML
<HTML>
|
|
<HEAD>
|
|
<TITLE>fork(2)</TITLE>
|
|
</HEAD>
|
|
<BODY>
|
|
<H1>fork(2)</H1>
|
|
<HR>
|
|
<PRE>
|
|
|
|
</PRE>
|
|
<H2>NAME</H2><PRE>
|
|
fork - create a new process
|
|
|
|
|
|
</PRE>
|
|
<H2>SYNOPSIS</H2><PRE>
|
|
<STRONG>#include</STRONG> <STRONG><sys/types.h></STRONG>
|
|
<STRONG>#include</STRONG> <STRONG><unistd.h></STRONG>
|
|
|
|
<STRONG>pid_t</STRONG> <STRONG>fork(void)</STRONG>
|
|
|
|
|
|
</PRE>
|
|
<H2>DESCRIPTION</H2><PRE>
|
|
<STRONG>Fork</STRONG> causes creation of a new process. The new process (child process)
|
|
is an exact copy of the calling process except for the following:
|
|
|
|
The child process has a unique process ID.
|
|
|
|
The child process has a different parent process ID (i.e., the
|
|
process ID of the parent process).
|
|
|
|
The child process has its own copy of the parent's descriptors.
|
|
These descriptors reference the same underlying objects, so that,
|
|
for instance, file pointers in file objects are shared between the
|
|
child and the parent, so that an <STRONG><A HREF="../man2/lseek.2.html">lseek(2)</A></STRONG> on a descriptor in the
|
|
child process can affect a subsequent <STRONG>read</STRONG> or <STRONG>write</STRONG> by the parent.
|
|
This descriptor copying is also used by the shell to establish
|
|
standard input and output for newly created processes as well as to
|
|
set up pipes.
|
|
|
|
The child starts with no pending signals and an inactive alarm
|
|
timer.
|
|
|
|
|
|
</PRE>
|
|
<H2>RETURN VALUE</H2><PRE>
|
|
Upon successful completion, <STRONG>fork</STRONG> returns a value of 0 to the child
|
|
process and returns the process ID of the child process to the parent
|
|
process. Otherwise, a value of -1 is returned to the parent process, no
|
|
child process is created, and the global variable <STRONG>errno</STRONG> is set to
|
|
indicate the error.
|
|
|
|
|
|
</PRE>
|
|
<H2>ERRORS</H2><PRE>
|
|
<STRONG>Fork</STRONG> will fail and no child process will be created if one or more of the
|
|
following are true:
|
|
|
|
[EAGAIN] The system-imposed limit on the total number of processes
|
|
under execution would be exceeded. This limit is
|
|
configuration-dependent. (The kernel variable NR_PROCS in
|
|
<minix/config.h> (Minix), or <minix/const.h> (Minix-vmd).)
|
|
|
|
[ENOMEM] There is insufficient (virtual) memory for the new
|
|
process.
|
|
|
|
|
|
|
|
</PRE>
|
|
<H2>SEE ALSO</H2><PRE>
|
|
<STRONG><A HREF="../man2/execve.2.html">execve(2)</A></STRONG>, <STRONG><A HREF="../man2/wait.2.html">wait(2)</A></STRONG>.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</PRE>
|
|
</BODY>
|
|
</HTML>
|