(2) System Calls Manual (2) fork - (libc -lc) #include pid_t fork(void); fork() . . . . fork() . (mmap(2)) (munmap(2)) . : o (setpgid(2)) . o . o (mlock(2), mlockall(2)). o (getrusage(2)) (times(2)) . o (sigpending(2)). o (semop(2)). o (fcntl(2)). ( fcntl(2) flock(2) .) o (setitimer(2), alarm(2), timer_create(2)). o / (aio_read(3), aio_write(3)) / ( io_setup(2)). POSIX.1. : o (dnotify) ( F_NOTIFY fcntl(2)). o prctl(2) PR_SET_PDEATHSIG . o . PR_SET_TIMERSLACK prctl(2). o madvise(2) MADV_DONTFORK fork(). o madvise(2) MADV_WIPEONFORK fork(). ( MADV_WIPEONFORK .) o SIGCHLD ( clone(2)). o ioperm(2) ioperm(2). : o -- fork(). pthreads pthread_atfork(3) . o fork() ( signal-safety(7)) execve(2). o . ( open(2)) . / ( F_SETOWN F_SETSIG fcntl(2)). o ( mq_overview(7)). . (mq_flags). o ( opendir(3)). POSIX.1 /glibc . (PID) 0 . -1 errno . EAGAIN . : o RLIMIT_NPROC ( setrlimit(2)) o /proc/sys/kernel/threads-max ( proc(5)) o (PIDs) /proc/sys/kernel/pid_max ( proc(5)) o PID (pids.max) cgroup " " (PIDs) . EAGAIN SCHED_DEADLINE fork . sched(7). ENOMEM fork() . ENOMEM PID "init" . pid_namespaces(7). ENOSYS fork() ( ). ERESTARTNOINTR ( 2.6.17) . ( trace.) C glibc 2.3.3 fork() glibc fork() NPTL clone(2) . ( fork() clone(2) flags SIGCHLD .) glibc fork pthread_atfork(3). _Fork(3) fork(2). POSIX.1-2024. 4.3BSD SVr4 POSIX.1-1988. fork() . pipe(2) wait(2) . #include #include #include #include #include #include int main(void) { pid_t pid; if (signal(SIGCHLD, SIG_IGN) == SIG_ERR) { perror("signal"); exit(EXIT_FAILURE); } pid = fork(); switch (pid) { case -1: perror("fork"); exit(EXIT_FAILURE); case 0: puts("Child exiting."); fflush(stdout); _exit(EXIT_SUCCESS); default: printf("Child is PID %jd\n", (intmax_t) pid); puts("Parent exiting."); exit(EXIT_SUCCESS); } } clone(2), execve(2), exit(2), _exit(2), setrlimit(2), unshare(2), vfork(2), wait(2), daemon(3), _Fork(3), pthread_atfork(3), capabilities(7), credentials(7) 3 . . : . 6.18 8 2026 (2)