Print this page
5776 vfork and getwd should not be exposed under XPG7

@@ -1,149 +1,135 @@
 VFORK(2)                         System Calls                         VFORK(2)
 
-
-
 NAME
-       vfork, vforkx - spawn new process in a virtual memory efficient way
+     vfork, vforkx  spawn new process in a virtual memory efficient way
 
 SYNOPSIS
        #include <unistd.h>
 
-       pid_t vfork(void);
+     pid_t
+     vfork(void);
 
-
        #include <sys/fork.h>
 
-       pid_t vforkx(int flags);
+     pid_t
+     vforkx(int flags);
 
-
 DESCRIPTION
        The vfork() and vforkx() functions create a new process without fully
-       copying the address space of the old process. These functions are
-       useful in instances where the purpose of a fork(2) operation is to
-       create a new system context for an execve() operation (see exec(2)).
+     copying the address space of the old process. These functions are useful
+     in instances where the purpose of a fork(2) operation is to create a new
+     system context for an exec(2) operation.
 
-
        Unlike with the fork() function, the child process borrows the parent's
-       memory and thread of control until a call to execve() or an exit
-       (either abnormally or by a call to _exit() (see exit(2)). Any
-       modification made during this time to any part of memory in the child
-       process is reflected in the parent process on return from vfork() or
-       vforkx(). The parent process is suspended while the child is using its
-       resources.
+     memory and thread of control until a call to execve() or an exit (either
+     abnormally or by a call to _exit(2)).  Any modification made during this
+     time to any part of memory in the child process is reflected in the
+     parent process on return from vfork() or vforkx().  The parent process is
+     suspended while the child is using its resources.
 
-
        In a multithreaded application,  vfork() and vforkx() borrow only the
-       thread of control that called vfork() or vforkx() in the parent; that
-       is, the child contains only one thread. The use of vfork() or vforkx()
-       in multithreaded applications, however, is unsafe due to race
-       conditions that can cause the child process to become deadlocked and
-       consequently block both the child and parent process from execution
-       indefinitely.
+     thread of control that called vfork() or vforkx() in the parent; that is,
+     the child contains only one thread. The use of vfork() or vforkx() in
+     multithreaded applications, however, is unsafe due to race conditions
+     that can cause the child process to become deadlocked and consequently
+     block both the child and parent process from execution indefinitely.
 
-
        The vfork() and vforkx() functions can normally be used the same way as
-       fork() and forkx(), respectively. The calling procedure, however,
-       should not return while running in the child's context, since the
-       eventual return from vfork() or vforkx() in the parent would be to a
-       stack frame that no longer exists. The _exit() function should be used
-       in favor of exit(3C) if unable to perform an execve() operation, since
-       exit() will invoke all functions registered by atexit(3C) and will
-       flush and close standard I/O channels, thereby corrupting the parent
-       process's standard I/O data structures. Care must be taken in the child
-       process not to modify any global or local data that affects the
-       behavior of the parent process on return from vfork() or vforkx(),
-       unless such an effect is intentional.
+     fork() and forkx(), respectively. The calling procedure, however, should
+     not return while running in the child's context, since the eventual
+     return from vfork() or vforkx() in the parent would be to a stack frame
+     that no longer exists. The _exit() function should be used in favor of
+     exit(3C) if unable to perform an execve() operation, since exit() will
+     invoke all functions registered by atexit(3C) and will flush and close
+     standard I/O channels, thereby corrupting the parent process's standard
+     I/O data structures. Care must be taken in the child process not to
+     modify any global or local data that affects the behavior of the parent
+     process on return from vfork() or vforkx(), unless such an effect is
+     intentional.
 
-
        Unlike fork() and forkx(), fork handlers are not run when vfork() and
        vforkx() are called.
 
+     The vfork() and vforkx() functions are deprecated. Their sole legitimate
+     use as a prelude to an immediate call to a function from the exec(2)
+     family can be achieved safely by posix_spawn(3C) or posix_spawnp(3C).
 
-       The vfork() and vforkx() functions are deprecated. Their sole
-       legitimate use as a prelude to an immediate call to a function from the
-       exec family can be achieved safely by posix_spawn(3C) or
-       posix_spawnp(3C).
-
    Fork Extensions
        The vforkx() function accepts a flags argument consisting of a bitwise
-       inclusive-OR of zero or more of the following flags, which are defined
-       in the header <sys/fork.h>:
+     inclusive-OR of zero or more of the following flags, which are defined in
+     the header <sys/fork.h>:
+
          FORK_NOSIGCHLD
          FORK_WAITPID
 
+     See fork(2) for descriptions of these flags. If the flags argument is 0,
+     vforkx() is identical to vfork().
 
-       See fork(2) for descriptions of these flags. If the flags argument is
-       0, vforkx() is identical to vfork().
-
 RETURN VALUES
        Upon successful completion, vfork() and vforkx() return  0 to the child
-       process and returns the process ID of the child process to the parent
-       process. Otherwise,1 is returned to the parent process, no child
-       process is created, and errno is set to indicate the error.
+     process and return the process ID of the child process to the parent
+     process. Otherwise, 1 is returned to the parent process, no child process
+     is created, and errno is set to indicate the error.
 
 ERRORS
        The vfork() and vforkx() functions will fail if:
 
-       EAGAIN
-                 The system-imposed limit on the total number of processes
-                 under execution (either system-quality or by a single user)
-                 would be exceeded. This limit is determined when the system
-                 is generated.
+     EAGAIN             The system-imposed limit on the total number of
+                        processes under execution (either system-quality or by
+                        a single user) would be exceeded. This limit is
+                        determined when the system is generated.
 
+     ENOMEM             There is insufficient swap space for the new process.
 
-       ENOMEM
-                 There is insufficient swap space for the new process.
-
-
-
        The vforkx() function will fail if:
 
-       EINVAL
-                 The flags argument is invalid.
+     EINVAL             The flags argument is invalid.
 
+INTERFACE STABILITY
+     The vfork() function is Obsolete Standard.
 
-ATTRIBUTES
-       See attributes(5) for descriptions of the following attributes:
+     The vforkx() function is Obsolete Uncommitted.
 
+MT-LEVEL
+     Unsafe.
 
-
-
-       +--------------------+-----------------+
-       |  ATTRIBUTE TYPE    | ATTRIBUTE VALUE |
-       +--------------------+-----------------+
-       |Interface Stability | Obsolete        |
-       +--------------------+-----------------+
-       |MT-Level            | Unsafe          |
-       +--------------------+-----------------+
-
 SEE ALSO
        exec(2), exit(2), fork(2), ioctl(2), atexit(3C), exit(3C),
        posix_spawn(3C), posix_spawnp(3C), signal.h(3HEAD), wait(3C),
-       attributes(5), standards(5)
+     standards(5)
 
 NOTES
        To avoid a possible deadlock situation, processes that are children in
        the middle of a vfork() or vforkx() are never sent SIGTTOU or SIGTTIN
        signals; rather, output or ioctls are allowed and input attempts result
        in an EOF indication.
 
+     To forestall parent memory corruption due to race conditions with signal
+     handling, vfork() and vforkx() treat signal handlers in the child process
+     in the same manner as the exec(2) functions: signals set to be caught by
+     the parent process are set to the default action (SIG_DFL) in the child
+     process (see signal.h(3HEAD)).  Any attempt to set a signal handler in
+     the child before execve() to anything other than SIG_DFL or SIG_IGN is
+     disallowed and results in setting the handler to SIG_DFL.
 
-       To forestall parent memory corruption due to race conditions with
-       signal handling, vfork() and vforkx() treat signal handlers in the
-       child process in the same manner as the exec(2) functions: signals set
-       to be caught by the parent process are set to the default action
-       (SIG_DFL) in the child process (see signal.h(3HEAD)). Any attempt to
-       set a signal handler in the child before execve() to anything other
-       than SIG_DFL or SIG_IGN is disallowed and results in setting the
-       handler to SIG_DFL.
-
-
        On some systems, the implementation of vfork() and vforkx() cause the
        parent to inherit register values from the child. This can create
        problems for certain optimizing compilers if <unistd.h> is not included
        in the source calling vfork() or if <sys/fork.h> is not included in the
        source calling vforkx().
 
+STANDARDS
+     The vfork() function is available in the following compilation
+     environments.  See standards(5).
 
+        X/Open Portability Guide Issue4, Version2 (XPG4.2)
+        Version2 of the Single UNIX Specification (SUSv2)
+        Version3 of the Single UNIX Specification (SUSv3)
 
-                               December 13, 2006                      VFORK(2)
+     It was marked obsolete in Version3 of the Single UNIX Specification
+     (SUSv3) and removed from IEEE Std 1003.1-2008 (POSIX.1).
+
+     The vforkx() function is a local extension and not available in any
+     strictly standards-compliant compilation environment.
+
+illumos                         August 20, 2014                        illumos