fork [ MPE/iX Developer's Kit Reference Manual Volume I ] MPE/iX 5.0 Documentation
MPE/iX Developer's Kit Reference Manual Volume I
fork
Creates a new child process.
Syntax
#include <sys/types.h>
#include <unistd.h>
pid_t fork (void);
Parameters
None.
Return Values
>0 Success. The process ID of the newly created child process is
returned to the calling process.
0 Success. A value of 0 is returned to the newly created child
process.
-1 An error occurred. The process is not created, and errno is
set to indicate the error condition.
Description
The fork() function creates a new child process. Both the new child
process and the calling process (known as the parent process) continue
execution upon the return from fork(). The new process is an exact copy
of the calling process with the following exceptions:
* The child process has a unique process ID that does not match any
active process group ID.
* The child process's parent process ID is that of the calling
process.
* The child process has its own copy of the parent's file
descriptors. Each of the child's file descriptors refers to the
same open file description as the corresponding file descriptor of
the parent.
* The child process has its own copy of the parent's open directory
streams. Each open directory stream in the child process shares
stream positioning with the corresponding directory stream of the
parent.
* Directory streams are implemented using file descriptors. Both
parent and child share the same open file descriptor for each
directory stream.
* The child process's tms_utime, tms_stime, tms_cutime, and
tms_cstime are set to zero.
* File locks set by the parent process are not inherited by the
child process.
* Pending alarms are cleared for the child process.
* The set of signals pending for the child process is set to the
empty set.
Implementation Considerations
Refer to the EPERM and EIMPL error descriptions below.
Some MPE/iX process characteristics not defined by POSIX are not
inherited by the child. Examples are CM structures such as extra data
segments, RINs, and SIRs.
The following MPE/iX characteristics not defined by POSIX.1 are inherited
by the child:
* process's priority
* process's capability
* stack size
* heap size
Errors
If an error occurs, errno is set to one of the following values:
EAGAIN CAUSE The system lacked the resources to create another
process.
ACTION Attempt process creation at a later time, or decrease
the number of processes associated with the
application.
EFAULT CAUSE The system detected a NULL or bad address in
attempting to use the functional return argument.
ACTION Make sure that the functional return is correctly
initialized.
EIMPL CAUSE The stack and heap could not be copied to the new
process, or a file could not be inherited to the new
process, or a system data structure could not be
copied to the new process.
ACTION Contact your Hewlett-Packard Support Representative.
ENOMEM CAUSE The program requires more memory than the system
allows for a process.
ACTION Reduce memory requirements for the process.
Table 4-0. (cont.)
EPERM CAUSE One of the following:
* The calling process does not have the MPE/iX
process handling (PH) capability.
* The calling process is not executing a program
file whose MPE/iX file code is NMPRG.
* The calling process has outstanding switches
to CM code, has set critical mode, has
outstanding NOWAITIO, or is holding an
operating system internal resource.
ACTION One of the following:
* Make sure that the calling process has the
MPE/iX PH capability.
* Make sure that the calling process is
executing a program file whose file code is
NMPRG.
* Do not execute fork() when the calling process
has outstanding switches to CM code, has set
critical mode, has outstanding NOWAITIO, or is
holding an operating system internal resource.
See Also
alarm(), execl(), execv(), kill(), wait(), POSIX.1 (Section 3.1.1)
MPE/iX 5.0 Documentation