tail head cat sleep
QR code linking to this page

Manual Pages  — FORK

NAME

fork – create a new process

CONTENTS

LIBRARY

Standard C Library (libc, -lc)

SYNOPSIS

#include <unistd.h>

pid_t
fork(void);

pid_t
_Fork(void);

DESCRIPTION

The fork() function causes creation of a new process. The new process (child process) is an exact copy of the calling process (parent process) except for the following:

The fork() function is not async-signal safe and creates a cancellation point in the parent process. It cannot be safely used from signal handlers, and the atfork handlers established by pthread_atfork(3) do not need to be async-signal safe either.

The _Fork() function creates a new process, similarly to fork(), but it is async-signal safe. _Fork() does not call atfork handlers, and does not create a cancellation point. It can be used safely from signal handlers, but then no userspace services ( malloc(3) or rtld(1)) are available in the child if forked from multi-threaded parent. In particular, if using dynamic linking, all dynamic symbols used by the child after _Fork() must be pre-resolved. Note: resolving can be done globally by specifying the LD_BIND_NOW environment variable to the dynamic linker, or per-binary by passing the -z now option to the static linker ld(1), or by using each symbol before the _Fork() call to force the binding.

RETURN VALUES

Upon successful completion, fork() and _Fork() return a value of 0 to the child process and return 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 errno is set to indicate the error.

EXAMPLES

The following example shows a common pattern of how fork() is used in practice.
#include <err.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(void) {         pid_t pid;

        /*          * If child is expected to use stdio(3), state of          * the reused io streams must be synchronized between          * parent and child, to avoid double output and other          * possible issues.          */         fflush(stdout);

        switch (pid = fork()) {         case -1:                 err(1, "Failed to fork");         case 0:                 printf("Hello from child process!\n");

                /*                  * Since we wrote into stdout, child needs to use                  * exit(3) and not _exit(2). This causes handlers                  * registered with atexit(3) to be called twice,                  * once in parent, and once in the child. If such                  * behavior is undesirable, consider                  * terminating child with _exit(2) or _Exit(3).                  */                 exit(0);         default:                 break;         }

        printf("Hello from parent process (child's PID: %d)!\n", pid);

        return (0); }

The output of such a program is along the lines of:

Hello from parent process (child's PID: 27804)!
Hello from child process!

ERRORS

The fork() system call will fail and no child process will be created if:
[EAGAIN]
  The system-imposed limit on the total number of processes under execution would be exceeded. The limit is given by the sysctl(3) MIB variable KERN_MAXPROC. (The limit is actually ten less than this except for the super user).
[EAGAIN]
  The user is not the super user, and the system-imposed limit on the total number of processes under execution by a single user would be exceeded. The limit is given by the sysctl(3) MIB variable KERN_MAXPROCPERUID.
[EAGAIN]
  The user is not the super user, and the soft resource limit corresponding to the resource argument RLIMIT_NPROC would be exceeded (see getrlimit(2)).
[ENOMEM]
  There is insufficient swap space for the new process.

SEE ALSO

execve(2), rfork(2), setitimer(2), setrlimit(2), sigaction(2), vfork(2), wait(2), pthread_atfork(3)

STANDARDS

The fork() and _Fork() functions conform to IEEE Std 1003.1-2024 ("POSIX.1").

HISTORY

The fork() function appeared in AT&T v1 . The _Fork() function appeared in FreeBSD 13.1 .

FORK (2) August 5, 2021

tail head cat sleep
QR code linking to this page


Please direct any comments about this manual page service to Ben Bullock. Privacy policy.