*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->Tru64 Unix man pages -> nfork (3)              
Title
Content
Arch
Section
 

nfork(3)

Contents


NAME    [Toc]    [Back]

       nfork - Creates a child process (libnuma library)

SYNOPSIS    [Toc]    [Back]

       #include <numa.h>

       pid_t nfork(
               numa_attr_t *numa_attr );

PARAMETERS    [Toc]    [Back]

       Points  to  a  structure of type numa_attr_t that contains
       the following members: The type of resource to  which  the
       child  process  will  be attached, or near which the child
       process will be located.  The resource descriptor for  the
       resource  to  which the child process will be attached, or
       near which the child process will be  located.   The  distance
  criteria  for  selecting  resources.  RADs  in  the
       caller's partition that have a distance (from  the  specified
  resource)  equal  to or less than this value will be
       considered as candidates for the child process's location.
       A  bit  mask  of  options that help control how the system
       assigns a "home RAD" to the child process.

              The following symbolic values are defined for  this
              bit  mask:  The  requested RAD assignment is mandatory.
 The child process will be created on  one  of
              the RADs in the specified RAD set regardless of the
              CPU or memory load  of  the  specified  RADs.   The
              child  process  might  not  be assigned to the same
              home RAD as its parent process.  Allows the  system
              to assign a home RAD to the child process depending
              on available resources.

              Normally, child processes do  inherit  the  assignments
  and  attributes  of the parent process.  The
              process has "small  memory"  requirements,  so  the
              system  should  favor (for the child process's home
              RAD) those RADs with light CPU  loads,  independent
              of  their  available memory.  The process has large
              memory requirements, so  the  system  should  favor
              (for  the child process's home RAD) those RADs with
              more available memory, independent of CPU loads.

              If numa_attr  is  NULL,  the  function  behaves  as
              fork().

DESCRIPTION    [Toc]    [Back]

       The  nfork()  function  causes  creation of a new process.
       The new process (child process) is an exact  copy  of  the
       calling  process  (parent  process).  This means the child
       process inherits the following attributes from the  parent
       process:  Environment  Close-on-exec  flag.  See  exec(2).
       Signal-handling  settings  (in   other   words,   SIG_DFL,
       SIG_IGN,  SIG_HOLD, function address) Set-user-ID mode bit
       Set-group-ID mode bit Trusted state Profiling on/off  status
   Nice   value.  See  nice(2).   All  attached  shared
       libraries Process group ID Session ID (tty group ID) Foreground
 process ID. See exit(2).  Current working directory
       Root directory File  mode  creation  mask.  See  umask(2).
       File  size limit. See ulimit(2).  All attached shared memory
 segments. See shmat(2).  All attached mapped  regions.
       See  mmap(2)  and  nmmap(3).   All mapped regions with the
       same protection and sharing mode as in the parent process.

       The  child  process differs from the parent process in the
       following ways: The child process has a unique process  ID
       that does not match any active process group ID.  The parent
 process ID of the child process matches the process ID
       of  the parent.  The child process has its own copy of the
       parent process's file descriptors.  Each  of  the  child's
       file  descriptors refers to the same open file description
       with the corresponding file descriptor of the parent  process.
   The child process has its own copy of the parent's
       open directory streams. Each open directory stream in  the
       child  process may share directory stream positioning with
       the corresponding directory stream  of  the  parent.   All
       semadj  values are cleared.  Process locks, text locks and
       data locks are not inherited by the child.  See  plock(2).
       The   child  process's  values  of  tms_utime,  tms_stime,
       tms_cutime, and tms_cstime are  set  to  0.   Any  pending
       alarms  are  cleared  in  the child process.  Any interval
       timers enabled by the parent  process  are  reset  in  the
       child process.  Any signals pending for the parent process
       are cleared for the child process.   The  NUMA  scheduling
       parameters  and  memory allocation attributes of the child
       process may be different from those of the parent process.

       The  nfork()  function  is  used when the caller wishes to
       specify the location where the  child  process  should  be
       loaded.  If  the  nattr_descr  field  is NULL, the nfork()
       function behaves identically to the fork()  function,  and
       the  child  process  inherits  the calling thread's memory
       allocation   policy   and   attributes.    However,    the
       nattr_flags  field may still affect how the system selects
       a home RAD for the child process, as described in  PARAMETERS.


       If  the  nattr_descr field is non-NULL, it, along with the
       nattr_type  and  nattr_distance  fields,  identifies   the
       acceptable  RADs  from which to select the child process's
       home RAD. The memory allocation policy for the child  process
 will be set to MPOL_THREAD.

       If  nattr_type  is  anything  other  than  R_RAD or R_NSG,
       nfork() will behave as though nloc() were called to obtain
       a  RAD  set  that  meets  the specified criteria, and then
       nfork() were called with nattr_type equal  to  R_RAD,  and
       nattr_descr  pointing  to  the RAD set returned by nloc().
       This  behavior  is  described  below.  The  nattr_distance
       parameter is ignored for a nattr_type of R_RAD or R_NSG.

       If   the   nattr_descr  field  is  equal  to  R_RAD,  then
       nattr_descr points  to  a  radset_t  that  identifies  the
       acceptable  RADs  from which to select the child process's
       initial home RAD. The remainder of the RAD set  (in  other
       words,  the set less the child process's home RAD) becomes
       the child's overflow set.

       A suitable set of RADs can be located according to  available
  resources by nloc() and can be manipulated using the
       operators described for radsetops(). Unless RAD_INSIST has
       been  set in nattr_flags, the specified RAD set is considered
 a hint, which may be overridden if all  the  RADs  in
       the  specified  set have very high CPU loads or too little
       available memory. If the RAD_INSIST flag is  specified  in
       nattr_flags,  the  RAD  specification is treated as mandatory,
 and the child process is  assigned  to  one  of  the
       specified   RADs  despite  a  large  CPU  load  or  memory
       shortage.

       When using nfork(), the  caller  can  further  specify  an
       appropriate  RAD by setting the RAD_SMALLMEM or RAD_LARGEMEM
 bits in the nattr_flags field.  RAD_SMALLMEM indicates
       that  the child will have very low memory requirements, so
       can be placed on a RAD having little available  memory  if
       that RAD has a particularly light CPU load. Conversely, if
       RAD_LARGEMEM is set, the process is placed on the RAD with
       the  most available memory even though that RAD may have a
       high CPU load.  RAD_SMALLMEM  and  RAD_LARGEMEM  are  also
       taken into account during any future process migrations.

       If   the   nattr_descr  field  is  equal  to  R_NSG,  then
       nattr_descr specifies a NUMA  Scheduling  Group  (NSG)  as
       returned by nsg_init(). The child process will be attached
       to the NSG and will receive the same home RAD as the other
       members in the NSG. If the child process is the first process
 to attach to the NSG, then the home RAD for the child
       will be inherited from the calling thread, just as for the
       fork() function.

NOTES    [Toc]    [Back]

       The nfork() function is supported for multithreaded applications.


       If a multithreaded process calls the nfork() function, the
       new process contains a replica of the calling  thread  and
       its entire address space, possibly including the states of
       mutexes  and  other  resources.  Consequently,  to   avoid
       errors,  the  child process should only execute operations
       that will not cause deadlock until one of the  exec  functions
 is called.

       The  set  of valid resources that may be specified is constrained
 by the caller's partition.

RETURN VALUES    [Toc]    [Back]

       Success (returned to the child process). In this case, the
       function  also returns the process ID of the child process
       to the parent process. The child process and  all  of  the
       related  data  structures  will be allocated on one of the
       RADs selected by the system  scheduler  from  among  those
       specified  by  the nattr_type, nattr_descr, and nattr_distance
 fields. The initial thread of the child process will
       be  scheduled on one of the available CPUs in the selected
       RAD.  Failure (returned to the parent  process).  In  this
       case,  no  child  process  is created, and errno is set to
       indicate the error.

ERRORS    [Toc]    [Back]

       If the nfork() function fails, it sets errno to one of the
       following values for the condition specified: The limit on
       the total number of processes executing for a single  user
       would be exceeded. This limit can be exceeded by a process
       with superuser privilege.  The numa_attr argument  or  the
       nattr_descr  structure field points to an invalid address.
       The nattr_type field specifies an invalid  resource  type,
       the  nattr_descr  field  specifies an invalid resource, or
       the nattr_flags field specifies an undefined flag.   There
       is not enough memory to create the child process.





SEE ALSO    [Toc]    [Back]

      
      
       Functions:  exec(2),  exit(2), fork(2), mmap(2), plock(2),
       umask(2),   nice(3),   nloc(3),   nmmap(3),   nsg_init(3),
       numa_intro(3), radsetops(3), ulimit(3)

       Files: numa_types(4)



                                                         nfork(3)
[ Back ]
 Similar pages
Name OS Title
rad_fork Tru64 Creates a new process on a Resource Affinity Domain (libnuma library)
rad_bind_pid Tru64 Attaches or binds a process to a Resource Affinity Domain by process ID (libnuma library)
nsg_detach_pid Tru64 Attaches a process to, or detaches a process from a NUMA Scheduling Group (libnuma library)
rad_attach_pid Tru64 Attaches or binds a process to a Resource Affinity Domain by process ID (libnuma library)
nsg_attach_pid Tru64 Attaches a process to, or detaches a process from a NUMA Scheduling Group (libnuma library)
nshmget Tru64 Returns (or creates) the ID for a shared memory region (libnuma library)
rad_detach_pid Tru64 Detach a process from a Resource Affinity Domain by pid (libnuma library)
numa_query_pid Tru64 Returns NUMA-related information for the specified process identifier (libnuma library)
nsg_get_pids Tru64 Return a list of a NUMA Scheduling Group's process identifiers (libnuma library)
pthread_atfork Tru64 Declares fork handler routines to be called when the calling thread's process forks a child process
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service