# SOME DESCRIPTIVE TITLE # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2024-06-01 06:34+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. type: TH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "vfork" msgstr "" #. type: TH #: archlinux debian-unstable opensuse-tumbleweed #, no-wrap msgid "2024-05-02" msgstr "" #. type: TH #: archlinux debian-unstable #, no-wrap msgid "Linux man-pages 6.8" msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "NAME" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "vfork - create a child process and block parent" msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "LIBRARY" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "Standard C library (I, I<-lc>)" msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "SYNOPSIS" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B<#include Eunistd.hE>\n" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B\n" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Feature Test Macro Requirements for glibc (see B(7)):" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "B():" msgstr "" #. || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "" " Since glibc 2.12:\n" " (_XOPEN_SOURCE E= 500) && ! (_POSIX_C_SOURCE E= 200809L)\n" " || /* Since glibc 2.19: */ _DEFAULT_SOURCE\n" " || /* glibc E= 2.19: */ _BSD_SOURCE\n" " Before glibc 2.12:\n" " _BSD_SOURCE || _XOPEN_SOURCE E= 500\n" msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "DESCRIPTION" msgstr "" #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Standard description" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "(From POSIX.1) The B() function has the same effect as B(2), " "except that the behavior is undefined if the process created by B() " "either modifies any data other than a variable of type I used to " "store the return value from B(), or returns from the function in " "which B() was called, or calls any other function before " "successfully calling B<_exit>(2) or one of the B(3) family of " "functions." msgstr "" #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Linux description" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "B(), just like B(2), creates a child process of the calling " "process. For details and return value and errors, see B(2)." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "B() is a special case of B(2). It is used to create new " "processes without copying the page tables of the parent process. It may be " "useful in performance-sensitive applications where a child is created which " "then immediately issues an B(2)." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "B() differs from B(2) in that the calling thread is suspended " "until the child terminates (either normally, by calling B<_exit>(2), or " "abnormally, after delivery of a fatal signal), or it makes a call to " "B(2). Until that point, the child shares all memory with its " "parent, including the stack. The child must not return from the current " "function or call B(3) (which would have the effect of calling exit " "handlers established by the parent process and flushing the parent's " "B(3) buffers), but may call B<_exit>(2)." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "As with B(2), the child process created by B() inherits copies " "of various of the caller's process attributes (e.g., file descriptors, " "signal dispositions, and current working directory); the B() call " "differs only in the treatment of the virtual address space, as described " "above." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Signals sent to the parent arrive after the child releases the parent's " "memory (i.e., after the child terminates or calls B(2))." msgstr "" #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Historic description" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Under Linux, B(2) is implemented using copy-on-write pages, so the " "only penalty incurred by B(2) is the time and memory required to " "duplicate the parent's page tables, and to create a unique task structure " "for the child. However, in the bad old days a B(2) would require " "making a complete copy of the caller's data space, often needlessly, since " "usually immediately afterward an B(3) is done. Thus, for greater " "efficiency, BSD introduced the B() system call, which did not fully " "copy the address space of the parent process, but borrowed the parent's " "memory and thread of control until a call to B(2) or an exit " "occurred. The parent process was suspended while the child was using its " "resources. The use of B() was tricky: for example, not modifying " "data in the parent process depended on knowing which variables were held in " "a register." msgstr "" #. type: SH #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "VERSIONS" msgstr "" #. In AIXv3.1 vfork is equivalent to fork. #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The requirements put on B() by the standards are weaker than those " "put on B(2), so an implementation where the two are synonymous is " "compliant. In particular, the programmer cannot rely on the parent " "remaining blocked until the child either terminates or calls B(2), " "and cannot rely on any specific behavior with respect to shared memory." msgstr "" #. type: Plain text #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-tumbleweed msgid "" "Some consider the semantics of B() to be an architectural blemish, " "and the 4.2BSD man page stated: \\[lq]This system call will be eliminated " "when proper system sharing mechanisms are implemented. Users should not " "depend on the memory sharing semantics of I as it will, in that case, " "be made synonymous to I.\\[rq] However, even though modern memory " "management hardware has decreased the performance difference between " "B(2) and B(), there are various reasons why Linux and other " "systems have retained B():" msgstr "" #. type: IP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "\\[bu]" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Some performance-critical applications require the small performance " "advantage conferred by B()." msgstr "" #. http://stackoverflow.com/questions/4259629/what-is-the-difference-between-fork-and-vfork #. http://developers.sun.com/solaris/articles/subprocess/subprocess.html #. http://mailman.uclinux.org/pipermail/uclinux-dev/2009-April/000684.html #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "B() can be implemented on systems that lack a memory-management unit " "(MMU), but B(2) can't be implemented on such systems. (POSIX.1-2008 " "removed B() from the standard; the POSIX rationale for the " "B(3) function notes that that function, which provides " "functionality equivalent to B(2)+ B(3), is designed to be " "implementable on systems that lack an MMU.)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "On systems where memory is constrained, B() avoids the need to " "temporarily commit memory (see the description of I in B(5)) in order to execute a new program. (This " "can be especially beneficial where a large parent process wishes to execute " "a small helper program in a child process.) By contrast, using B(2) " "in this scenario requires either committing an amount of memory equal to the " "size of the parent process (if strict overcommitting is in force) or " "overcommitting memory with the risk that a process is terminated by the out-" "of-memory (OOM) killer." msgstr "" #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Linux notes" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Fork handlers established using B(3) are not called when a " "multithreaded program employing the NPTL threading library calls " "B(). Fork handlers are called in this case in a program using the " "LinuxThreads threading library. (See B(7) for a description of " "Linux threading libraries.)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "A call to B() is equivalent to calling B(2) with I " "specified as:" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid " CLONE_VM | CLONE_VFORK | SIGCHLD\n" msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "STANDARDS" msgstr "" #. type: Plain text #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-leap-15-6 opensuse-tumbleweed msgid "None." msgstr "" #. type: SH #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "HISTORY" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "4.3BSD; POSIX.1-2001 (but marked OBSOLETE). POSIX.1-2008 removes the " "specification of B()." msgstr "" #. In the release notes for 4.2BSD Sam Leffler wrote: `vfork: Is still #. present, but definitely on its way out'. #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The B() system call appeared in 3.0BSD. In 4.4BSD it was made " "synonymous to B(2) but NetBSD introduced it again; see E<.UR http://" "www.netbsd.org\\:/Documentation\\:/kernel\\:/vfork.html> E<.UE .> In Linux, " "it has been equivalent to B(2) until Linux 2.2.0-pre6 or so. Since " "Linux 2.2.0-pre9 (on i386, somewhat later on other architectures) it is an " "independent system call. Support was added in glibc 2.0.112." msgstr "" #. type: SH #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "CAVEATS" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The child process should take care not to modify the memory in unintended " "ways, since such changes will be seen by the parent process once the child " "terminates or executes another program. In this regard, signal handlers can " "be especially problematic: if a signal handler that is invoked in the child " "of B() changes memory, those changes may result in an inconsistent " "process state from the perspective of the parent process (e.g., memory " "changes would be visible in the parent, but changes to the state of open " "file descriptors would not be visible)." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "When B() is called in a multithreaded process, only the calling " "thread is suspended until the child terminates or executes a new program. " "This means that the child is sharing an address space with other running " "code. This can be dangerous if another thread in the parent process changes " "credentials (using B(2) or similar), since there are now two " "processes with different privilege levels running in the same address " "space. As an example of the dangers, suppose that a multithreaded program " "running as root creates a child using B(). After the B(), a " "thread in the parent process drops the process to an unprivileged user in " "order to run some untrusted code (e.g., perhaps via plug-in opened with " "B(3)). In this case, attacks are possible where the parent process " "uses B(2) to map in code that will be executed by the privileged " "child process." msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "BUGS" msgstr "" # #. As far as I can tell, the following is not true in Linux 2.6.19: #. Currently (Linux 2.3.25), #. .BR strace (1) #. cannot follow #. .BR vfork () #. and requires a kernel patch. #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Details of the signal handling are obscure and differ between systems. The " "BSD man page states: \"To avoid a possible deadlock situation, processes " "that are children in the middle of a B() are never sent B " "or B signals; rather, output or Is are allowed and input " "attempts result in an end-of-file indication.\"" msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "SEE ALSO" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "B(2), B(2), B<_exit>(2), B(2), B(2), B(2)" msgstr "" #. type: TH #: debian-bookworm #, no-wrap msgid "2023-02-05" msgstr "" #. type: TH #: debian-bookworm #, no-wrap msgid "Linux man-pages 6.03" msgstr "" #. type: SH #: debian-bookworm #, no-wrap msgid "NOTES" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 msgid "" "Some consider the semantics of B() to be an architectural blemish, " "and the 4.2BSD man page stated: \"This system call will be eliminated when " "proper system sharing mechanisms are implemented. Users should not depend " "on the memory sharing semantics of B() as it will, in that case, be " "made synonymous to B(2). \" However, even though modern memory " "management hardware has decreased the performance difference between " "B(2) and B(), there are various reasons why Linux and other " "systems have retained B():" msgstr "" #. type: SS #: debian-bookworm #, no-wrap msgid "Caveats" msgstr "" #. type: SS #: debian-bookworm #, no-wrap msgid "History" msgstr "" #. type: TH #: fedora-40 fedora-rawhide mageia-cauldron #, no-wrap msgid "2023-10-31" msgstr "" #. type: TH #: fedora-40 mageia-cauldron #, no-wrap msgid "Linux man-pages 6.06" msgstr "" #. type: TH #: fedora-rawhide #, no-wrap msgid "Linux man-pages 6.7" msgstr "" #. type: TH #: opensuse-leap-15-6 #, no-wrap msgid "2023-03-30" msgstr "" #. type: TH #: opensuse-leap-15-6 #, no-wrap msgid "Linux man-pages 6.04" msgstr "" #. type: TH #: opensuse-tumbleweed #, no-wrap msgid "Linux man-pages (unreleased)" msgstr ""