IceWalkers.com - Linux Software downloads and news
Name : Password :
Linux SoftwareLinux RPMLinux HowtosLink UsAboutAdvertise

clone (2)

CLONE(2)                   Linux Programmer's Manual                  CLONE(2)



NAME
       clone - create a child process

SYNOPSIS
       #include<sched.h>

       intclone(int(*fn)(void*),void*child_stack,int flags,void*arg);

       _syscall2(int, clone,int, flags,void*, child_stack)


DESCRIPTION
       clone  creates  a  new  process, just like fork(2).  clone is a library
       function layered on top of the  underlying  clone  system  call,  here-
       inafter  referred to as sys_clone.  A description of sys_clone is given
       towards the end of this page.

       Unlike fork(2), these calls allow the child process to share  parts  of
       its  execution  context  with  the  calling process, such as the memory
       space, the table of file descriptors, and the table of signal handlers.
       (Note  that on this manual page, "calling process" normally corresponds
       to "parent process".  But see the description of CLONE_PARENT below.)

       The main use of clone is to implement threads: multiple threads of con-
       trol in a program that run concurrently in a shared memory space.

       When  the child process is created with clone, it executes the function
       application fn(arg).  (This differs from fork(2), where execution  con-
       tinues  in the child from the point of the fork(2) call.)  The fn argu-
       ment is a pointer to a function that is called by the child process  at
       the  beginning  of its execution.  The arg argument is passed to the fn
       function.

       When the fn(arg) function application returns, the child process termi-
       nates.   The integer returned by fn is the exit code for the child pro-
       cess.  The child process  may  also  terminate  explicitly  by  calling
       exit(2) or after receiving a fatal signal.

       The  child_stack  argument  specifies the location of the stack used by
       the child process.  Since the child and calling process may share  mem-
       ory,  it  is  not possible for the child process to execute in the same
       stack as the calling process.  The calling process must  therefore  set
       up memory space for the child stack and pass a pointer to this space to
       clone.  Stacks grow downwards on all processors that run Linux  (except
       the  HP  PA  processors),  so child_stack usually points to the topmost
       address of the memory space set up for the child stack.

       The low byte of flags contains the number of the  signal  sent  to  the
       parent  when  the  child dies.  If this signal is specified as anything
       other than SIGCHLD, then the parent process must specify the __WALL  or
       __WCLONE options when waiting for the child with wait(2).  If no signal
       is specified, then the parent process is not signaled  when  the  child
       terminates.

       flags  may  also  be bitwise-or'ed with one or several of the following
       constants, in order to specify what is shared between the calling  pro-
       cess and the child process:


       CLONE_PARENT
              (Linux  2.4  onwards) If CLONE_PARENT is set, then the parent of
              the new child (as returned by getppid(2)) will be  the  same  as
              that of the calling process.

              If  CLONE_PARENT  is not set, then (as with fork(2)) the child's
              parent is the calling process.

              Note that it is the parent process, as returned  by  getppid(2),
              which  is  signaled  when  the  child  terminates,  so  that  if
              CLONE_PARENT is set, then the parent  of  the  calling  process,
              rather than the calling process itself, will be signaled.


       CLONE_FS
              If CLONE_FS is set, the caller and the child processes share the
              same file system information.  This includes  the  root  of  the
              file  system, the current working directory, and the umask.  Any
              call to chroot(2), chdir(2), or umask(2) performed by the  call-
              ing  process or the child process also takes effect in the other
              process.

              If CLONE_FS is not set, the child process works on a copy of the
              file  system  information  of the calling process at the time of
              the clone call.  Calls to  chroot(2),  chdir(2),  umask(2)  per-
              formed  later  by  one  of the processes do not affect the other
              process.


       CLONE_FILES
              If CLONE_FILES is set, the calling process and  the  child  pro-
              cesses  share  the same file descriptor table.  File descriptors
              always refer to the same files in the calling process and in the
              child  process.  Any file descriptor created by the calling pro-
              cess or by the child process is also valid in the other process.
              Similarly,  if one of the processes closes a file descriptor, or
              changes  its  associated  flags,  the  other  process  is   also
              affected.

              If  CLONE_FILES is not set, the child process inherits a copy of
              all file descriptors opened in the calling process at  the  time
              of  clone.   Operations  on  file descriptors performed later by
              either the calling process or the child process  do  not  affect
              the other process.


       CLONE_NEWNS
              (Linux 2.4.19 onwards) Start the child in a new namespace.

              Every  process  lives in a namespace. The namespace of a process
              is the data (the set of mounts) describing the file hierarchy as
              seen  by  that  process.  After  a fork(2) or clone(2) where the
              CLONE_NEWNS flag is not set, the child lives in the same  names-
              pace  as  the  parent.   The system calls mount(2) and umount(2)
              change the namespace of the calling process,  and  hence  affect
              all processes that live in the same namespace, but do not affect
              processes in a different namespace.

              After a clone(2) where the CLONE_NEWNS flag is set,  the  cloned
              child  is started in a new namespace, initialized with a copy of
              the namespace of the parent.

              Only a privileged process may specify the CLONE_NEWNS flag.   It
              is not permitted to specify both CLONE_NEWNS and CLONE_FS in the
              same clone call.


       CLONE_SIGHAND
              If CLONE_SIGHAND is set, the calling process and the child  pro-
              cesses  share the same table of signal handlers.  If the calling
              process or child process calls sigaction(2) to change the behav-
              ior  associated  with  a  signal, the behavior is changed in the
              other process as well.  However, the calling process  and  child
              processes  still  have distinct signal masks and sets of pending
              signals.  So, one of them may  block  or  unblock  some  signals
              using sigprocmask(2) without affecting the other process.

              If  CLONE_SIGHAND  is not set, the child process inherits a copy
              of the signal handlers of the calling process at the time  clone
              is  called.  Calls to sigaction(2) performed later by one of the
              processes have no effect on the other process.


       CLONE_PTRACE
              If CLONE_PTRACE is specified, and the calling process  is  being
              traced, then trace the child also (see ptrace(2)).


       CLONE_VFORK
              If  CLONE_VFORK  is set, the execution of the calling process is
              suspended until the child releases its virtual memory  resources
              via a call to execve(2) or _exit(2) (as with vfork(2)).

              If  CLONE_VFORK is not set then both the calling process and the
              child are schedulable after the call, and an application  should
              not rely on execution occurring in any particular order.


       CLONE_VM
              If  CLONE_VM is set, the calling process and the child processes
              run in the same memory space.  In particular, memory writes per-
              formed  by  the calling process or by the child process are also
              visible in the other process.  Moreover, any memory  mapping  or
              unmapping  performed  with  mmap(2) or munmap(2) by the child or
              calling process also affects the other process.

              If CLONE_VM is not set, the child process  runs  in  a  separate
              copy  of  the memory space of the calling process at the time of
              clone.  Memory writes or file mappings/unmappings  performed  by
              one of the processes do not affect the other, as with fork(2).


       CLONE_PID
              If  CLONE_PID is set, the child process is created with the same
              process ID as the calling process.

              If CLONE_PID is not set, the child process  possesses  a  unique
              process ID, distinct from that of the calling process.

              This  flag can only be specified by the system boot process (PID
              0).


       CLONE_THREAD
              (Linux 2.4 onwards) If CLONE_THREAD is set, the child is  placed
              in the same thread group as the calling process.

              If  CLONE_THREAD is not set, then the child is placed in its own
              (new) thread group, whose ID is the same as the process ID.

              (Thread groups are feature added in Linux  2.4  to  support  the
              POSIX  threads  notion of a set of threads sharing a single PID.
              In Linux 2.4, calls to getpid(2) return the thread group  ID  of
              the caller.)


       The  sys_clone  system call corresponds more closely to fork(2) in that
       execution in the child continues from the point  of  the  call.   Thus,
       sys_clone only requires the flags and child_stack arguments, which have
       the same meaning as for clone.  (Note that the order of these arguments
       differs from clone.)

       Another  difference  for sys_clone is that the child_stack argument may
       be zero, in which case copy-on-write semantics ensure  that  the  child
       gets  separate  copies  of stack pages when either process modifies the
       stack.  In this case, for correct operation, the CLONE_VM option should
       not be specified.


RETURNVALUE
       On  success,  the  PID of the child process is returned in the caller's
       thread of execution.  On failure, a -1 will be returned in the caller's
       context, no child process will be created, and errno will be set appro-
       priately.


ERRORS
       EAGAIN Too many processes are already running.

       ENOMEM Cannot allocate sufficient memory to allocate a  task  structure
              for  the  child,  or to copy those parts of the caller's context
              that need to be copied.

       EINVAL Returned  by  clone  when  a  zero  value   is   specified   for
              child_stack.

       EINVAL Both CLONE_FS and CLONE_NEWNS were specified in flags.

       EINVALCLONE_THREAD  was  specified,  but CLONE_SIGHAND was not. (Since
              Linux 2.5.35.)

       EPERMCLONE_PID was specified by a process with a non-zero PID.

BUGS
       As of version 2.1.97 of the kernel, the CLONE_PID flag  should  not  be
       used,  since  other  parts of the kernel and most system software still
       assume that process IDs are unique.

       There is no entry for clone in libc version 5.  libc 6 (a.k.a. glibc 2)
       provides clone as described in this manual page.


NOTES
       For  kernel  versions  2.4.7-2.4.18  the  CLONE_THREAD flag implied the
       CLONE_PARENT flag.


CONFORMINGTO
       The clone and sys_clone calls are Linux-specific and should not be used
       in programs intended to be portable.  For programming threaded applica-
       tions (multiple threads of control in the same  memory  space),  it  is
       better to use a library implementing the POSIX 1003.1c thread API, such
       as the LinuxThreads library (included  in  glibc2).   See  pthread_cre-
       ate(3).

       This manual page corresponds to kernels 2.0.x, 2.1.x, 2.2.x, 2.4.x, and
       to glibc 2.0.x and 2.1.x.


SEEALSO
       fork(2), wait(2), pthread_create(3)



Linux 2.4                         2001-12-31                          CLONE(2)

_Exitgetsockoptoutwshmat
_exitgettidoutw_pshmctl
_llseekgettimeofdaypauseshmdt
_newselectgetuidpersonalityshmget
_sysctlgttypipeshmop
acceptidlepivot_rootshutdown
accessinbpollsigaction
acctinb_pprctlsigaltstack
adjtimexinlpreadsigblock
afs_syscallinl_pprofsiggetmask
alarminsbpselectsigmask
alloc_hugepagesinslptracesignal
arch_prctlinswpwritesigpause
bdflushintroquotactlsigpending
bindinwreadsigprocmask
breakinw_preaddirsigqueue
brkioctlreadlinksigreturn
cacheflushioctl_listreadvsigsetmask
capgetiopermrebootsigsuspend
capsetioplrecvsigtimedwait
chdiripcrecvfromsigvec
chmodkillrecvmsgsigwaitinfo
chownkillpgrenamesocket
chrootlchownrmdirsocketcall
clonelinksbrksocketpair
closelistensched_get_priority_maxssetmask
connectllseeksched_get_priority_minstat
creatlocksched_getaffinitystatfs
duplseeksched_getparamstime
dup2lstatsched_getschedulerstty
execvemadvisesched_rr_get_intervalswapoff
exitmincoresched_setaffinityswapon
fchdirmkdirsched_setparamsymlink
fchmodmknodsched_setschedulersync
fchownmlocksched_yieldsyscall
fcntlmlockallselectsyscalls
fdatasyncmmapselect_tutsysctl
flockmmap2semctlsysfs
forkmodify_ldtsemgetsysinfo
free_hugepagesmountsemopsyslog
fstatmprotectsendtime
fstatfsmpxsendfiletimes
fsyncmremapsendmsgtkill
ftruncatemsgctlsendtotruncate
futexmsggetsetcontextumask
getcontextmsgopsetdomainnameumount
getdentsmsgrcvsetegidumount2
getdomainnamemsgsndseteuiduname
getdtablesizemsyncsetfsgidundocumented
getegidmunlocksetfsuidunimplemented
geteuidmunlockallsetgidunlink
getgidmunmapsetgroupsuselib
getgroupsnanosleepsethostidustat
gethostidnfsservctlsethostnameutime
gethostnamenicesetitimerutimes
getitimerobsoletesetpgidvfork
getpagesizeoldfstatsetpgrpvhangup
getpeernameoldlstatsetpriorityvm86
getpgidoldoldunamesetregidwait
getpgrpoldstatsetresgidwait3
getpidoldunamesetresuidwait4
getppidopensetreuidwaitpid
getpriorityoutbsetrlimitwrite
getresgidoutb_psetsidwritev
getresuidoutlsetsockopt 
getrlimitoutl_psettimeofday 
getrusageoutsbsetuid 
getsidoutslsetup 


My Money 2.0.49
Personal financial software
Linux Kernel 2.6 2.6.32-rc8
Linux Kernel
GCstar 1.5.0
Personal collections manager
ImageMagick 6.5.7.9
ImageMagick image processing studio
BibleTime 2.4
Bible study software for Linux / KDE
PHP 5.3.1
Server-side, cross-platform, HTML embedded scripting language.
LFTP 4.0.4
Shell-like command line ftp client.
GNOME 2.29.2
GNOME desktop environment
Midgard 9.09.0
Web application development and publishing platform
Totem 2.28.4
Movie player for Gnome
Free IT Magazines, White Papers, eBooks, and more !
Oracle Magazine

Contains technology strategy articles, sample code, tips, Oracle and partner news, how to articles for developers and DBAs, and more.

Vulnerability Management for Dummies

Get all the Facts and See How to Implement a Successful Vulnerability Management Program.

Website Magazine

Has tapped premier talent in the Internet industry for our content and each and every issue will contain practical advice and insights for website owners.

Linux Software Map
Find Linux RPM
Best Rated Linux Software
Most Rated Linux Software
Linux Distributions
Linux Howtos
Quick Survey

Please take our survey and help us improve our website to serve you better.

Thank you.
Linux Software
Linux / IT Resources
Site Resources
Google
Privacy Policy
Contact Us
Submit Software
Advertising info